2014-10-28 69 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; 
    }