您好我在编写此功能时遇到了问题。
目标是编写一个计算进行变更所需硬币数量最少的函数。该函数必须使用递归,并且您无法使用任何类型的循环。
我遇到这个问题很麻烦的原因是返回类型是所有硬币的结构:
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;
谢谢!
答案 0 :(得分:0)
至少存在这些问题。
Martian
更改为struct Martian
申报和使用时。
定义结构的示例:
struct Foo
{
int x;
int array[100];
};
声明和使用示例:
struct Foo f;
f.x = 54;
f.array[3]=9;
答案 1 :(得分:0)
我不明白你的问题。当你不需要它们时,结构和递归的意义是什么,甚至是那个循环?
#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;
}