2014-10-28 72 views
0

您好,我无法编写此函数。使用递归进行最小数量的硬币更改

其目的是编写一个函数,计算需要进行更改的最少金币数量。该函数必须使用递归,并且不能使用任何类型的循环。

为什么我遇到了很多麻烦这个问题的原因是,返回类型是所有硬币的结构:

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

你的问题是什么?我不太明白。 (但是如何写这个东西很明显。) – Deduplicator 2014-10-28 01:49:41

+2

在显示错误的代码时,使用变量名称如'cool'或函数名称如'awesome_solution'永远都不明智;-) – 2014-10-28 02:31:26

+0

对不起,我只是停留在什么基础上这种递归的情况是 – Bob506 2014-10-28 02:43:28

回答

0

至少有这些问题。

Martian更改为struct Martian 声明和用法。定义一个结构的

例子:

 struct Foo 
     { 
        int x; 
        int array[100]; 
     }; 

宣言和用法示例:

 struct Foo f; 
     f.x = 54; 
     f.array[3]=9; 
+0

如果这是你想知道的问题,该程序将编译。 – Bob506 2014-10-28 02:29:13

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; 
    }