C言語で再帰呼び出し使ってプログラムをつくりたいのですが、
難解でどうすればいいのか四苦八苦しています。
どなたかアドバイスを頂けないでしょうか?
問題
200円を1円、5円、10円、50円、100円の5種類の硬貨を使って、何通りの支払い方法があるかを求めるプログラムを再帰呼び出しを使って作る。関数change(int n, int k)を定義(n 円をk 円以下の硬貨で支払う支払い方の数を返す関数)し、main()関数では、支払う金額を1円から200円まで1円きざみで繰り返して「1円 = 1通り」、、「200円 = ???通り」のように、200行の出力を得られるようにする。
現状として1円から200円まで1円きざみで繰り返すことはできたのですが、
「1円 = 1通り」、、「200円 = ???通り」と表す時に、下記のようになってしまいます。
1円=1通りのように横並びに書くにはどうすればいいのでしょうか。
1円= 2円= 3円= 4円= . . . 196円= 197円= 198円= 199円= 200円= 0通り
また、何通りか表す時に0になってしまうのですが、
どう組み合わせを変更したら良いものか全く手が出ず困っています。
サンプルプログラムしかりアドバイスしかり、
ご助力願えないでしょうか。
どうかよろしくお願いします。
現状
c
1#include <stdio.h> 2#include <stdlib.h> 3 4// カウンタ変数 5int i, count; 6//支払い方法の数を数える関数(n:200円をk:100円以下の硬貨で) 7int change(int n, int k){ 8 9 int count; 10 for(int i = 1; i <= 200; i++){ 11 count = i; 12 printf("%d円=\n",count); 13 } 14 15 //change(n, 1) は,1円玉だけしか使えないので1通り 16 if (count == 1) { 17 return 1; 18 } else if(count == 5) { //change(n, 5) は,change(n, 1) + change(n −5, 5) 19 return change(n, 1) + change(n - 5, 5); 20 } else if(count == 10) { //change(n, 10) は,change(n, 5)+change(n−10, 10) 21 return change(n, 5)+change(n - 10, 10); 22 } else if(count == 50) { //change(n, 50) は,change(n, 10)+change(n−50, 50) 23 return change(n, 10)+change(n - 50, 50); 24 } else if(count == 100) { //change(n, 100) は,change(n, 50)+change(n−100, 100) 25 return change(n, 50)+change(n - 100, 100); 26 } else{ 27 return 0; 28 } 29 } 30 31 32int main(){ 33 int way; 34 way = change(200, 100); 35 printf("%d通り\n", way); 36 exit(0); 37}
試したこと
横に並べようと思い、以下のようにしてみたのですが、上手くいきませんでした。
c
1#include <stdio.h> 2#include <stdlib.h> 3 4//支払い方法の数を数える関数(n:200円をk:100円以下の硬貨で) 5int change(int n, int k){ 6 7 //change(n, 1) は,1円玉だけしか使えないので1通り 8 if (k == 1) { 9 return 1; 10 } else if(k == 5) { //change(n, 5) は,change(n, 1) + change(n −5, 5) 11 return change(n, 1) + change(n - 5, 5); 12 } else if(k == 10) { //change(n, 10) は,change(n, 5)+change(n−10, 10) 13 return change(n, 5)+change(n - 10, 10); 14 } else if(k == 50) { //change(n, 50) は,change(n, 10)+change(n−50, 50) 15 return change(n, 10)+change(n - 50, 50); 16 } else if(k == 100) { //change(n, 100) は,change(n, 50)+change(n−100, 100) 17 return change(n, 50)+change(n - 100, 100); 18 } else{ 19 return 0; 20 } 21 } 22 23 24int main(){ 25 int i, count, way; 26 way = change(200, 100); 27 for(int i = 1; i <= 200; i++){ 28 count = i; 29 printf("%s円=\n","%d通り\n", count, way); 30 } 31 exit(0); 32}
上記のエラー
c
1test6.c:29:37: warning: data argument not used by format string [-Wformat-extra-args] 2 printf("%s円=\n","%d通り\n", count, way); 3 ~~~~~~~~~ ^ 41 warning generated.

回答3件
あなたの回答
tips
プレビュー