[英]Making Change with least amount of Coins using recursion
您好,我在編寫此功能時遇到麻煩。
目的是編寫一個函數,以計算進行找零所需的最少硬幣數量。 該函數必須使用遞歸,並且您將無法使用任何形式的循環。
我在這個問題上遇到很多麻煩的原因是,返回類型是所有硬幣的結構:
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;
謝謝!
至少存在這些問題。
在聲明和使用時,將struct Martian
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.