Внесение изменений с наименьшим количеством монет с использованием рекурсии

Здравствуйте, у меня проблемы с написанием этой функции.

Цель состоит в том, чтобы написать функцию, которая вычисляет наименьшее количество монет, необходимое для внесения изменений. Функция должна использовать рекурсию, и вы не можете использовать циклы любого вида.

Причина, по которой у меня много проблем с этой проблемой, заключается в том, что тип возвращаемого значения - это структура всех монет:

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;
    }
Другие вопросы по тегам