Внесение изменений с наименьшим количеством монет с использованием рекурсии
Здравствуйте, у меня проблемы с написанием этой функции.
Цель состоит в том, чтобы написать функцию, которая вычисляет наименьшее количество монет, необходимое для внесения изменений. Функция должна использовать рекурсию, и вы не можете использовать циклы любого вида.
Причина, по которой у меня много проблем с этой проблемой, заключается в том, что тип возвращаемого значения - это структура всех монет:
struct Martian {
int pennies; //Represent one cent
int nicks; //Represent five cents
int dodeks; //Represent twelve cents
};
Функция выглядит так:
Martian change(int cents)
{
}
Это домашнее задание, поэтому я не спрашиваю ответа, но у меня просто много трудностей, пытаясь выяснить, какими должны быть базовые случаи для этого. Это то, что я имею до сих пор:
Martian cool = {0, 0, 0};
if(cents < 0)
{
Martian cool = {0,0,0};
return cool;
}
else if(cents == 0)
{
Martian cool = {0, 0, 0};
cool.pennies = 1;
return cool;
}
else if(cents > 12)
{
cool.dodeks++;
cents -= 12;
}
else if(cents > 5)
{
cool.nicks++;
cents -= 5;
}
cool.dodeks += change(cents - 12).dodeks;
cool.nicks += change(cents - 5).nicks;
cool.pennies += cents;
return cool;
Спасибо!
2 ответа
По крайней мере, есть эти проблемы.
Martian
изменить на struct Martian
когда декларация и использование.
Пример определения структуры:
struct Foo
{
int x;
int array[100];
};
Пример объявления и использования:
struct Foo f;
f.x = 54;
f.array[3]=9;
Я не понимаю ваш вопрос. Какой смысл в структурах и рекурсии, когда они вам не нужны, или даже циклы в этом отношении?
#include <stdio.h>
int main (int argc, char *argv[]) {
int pennies, dodeks, nicks;
if (argc < 2) return 1;
sscanf (argv[1], "%d", &pennies);
dodeks = pennies / 12;
pennies -= dodeks * 12;
nicks = pennies / 5;
pennies -= nicks * 5;
printf ("dodeks: %d, nicks: %d, pennies: %d\n", dodeks, nicks, pennies);
return 0;
}
Установив простой алгоритм, давайте украсим его рекурсией в соответствии с вашей домашней работой. Вы не дали понять, требуется ли использовать struct
для изменения, поэтому я не буду. Если это так - вам остается что-то делать!
#include <stdio.h>
#define COINS 3
char *coins [COINS] = {"dodeks", "nicks", "pennies" };
int value [COINS] = { 12, 5, 1 };
void change (int money, int coin) {
int count = money / value [coin];
money -= count * value [coin];
printf ("%s: %d, ", coins[coin], count);
if (++coin < COINS)
change (money, coin);
}
int main (int argc, char *argv[]) {
int money;
if (argc < 2) return 1;
sscanf (argv[1], "%d", &money);
change (money, 0);
printf ("\n");
return 0;
}