版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88013877
代码太长,感觉可以使用递归解决,但是目前没有想出合适的解决方案,大神们有好的思路可以留言
把张数最少的那一种显示出来,现在也没有很好的思路
问题
有面值为 100 50 20 10 5 1 的几种人民币,输入金额,罗列
出所有的组合方案,并且统计出用的张数最少的那一种,并且显示
代码
#include <stdio.h>
int main() {
int i_1,i_2,i_3,i_4,i_5,i_6;
int sum,sum_1,sum_2,sum_3,sum_4,sum_5,sum_6;
int num;
sum=0;
printf("请输入面值金额:");
scanf("%d",&num);
if(num) {
i_1 = 0; //表示100的张数
sum_1 = sum;
while(sum+i_1*100<num) {
if(sum_1<num) {
i_2 = 0; //表示50的张数
sum_2 = sum_1;
while(sum_1 + i_2*50<num) {
if(sum_2<num) {
i_3 = 0; //表示20的张数
sum_3 = sum_2;
while(sum_2 + i_3*20<num) {
if(sum_3<num) {
i_4 = 0; //表示10的张数
sum_4 = sum_3;
while(sum_3 + i_4*10<num) {
if(sum_4<num) {
i_5 = 0; //表示5的张数
sum_5 = sum_4;
while(sum_4 + i_5*5<num) {
if(sum_5<num) {
i_6 = 0; //表示1的张数
sum_6 = sum_5;
while(sum_5 + i_6*1<num) {
i_6++;
sum_6 = sum_6 + 1;
if(sum_6==num) printf("需要%d张100,需要%d张50,需要%d张20,需要%d张10,需要%d张5,需要%d张1\n",i_1,i_2,i_3,i_4,i_5,i_6);
}
}
i_5++;
sum_5 = sum_5 + 5;
if(sum_5==num) printf("需要%d张100,需要%d张50,需要%d张20,需要%d张10,需要%d张5\n",i_1,i_2,i_3,i_4,i_5);
}
}
i_4++;
sum_4 = sum_4 + 10;
if(sum_4==num) printf("需要%d张100,需要%d张50,需要%d张20,需要%d张10\n",i_1,i_2,i_3,i_4);
}
}
i_3++;
sum_3 = sum_3 + 20;
if(sum_3==num) printf("需要%d张100,需要%d张50,需要%d张20\n",i_1,i_2,i_3);
}
}
i_2++;
sum_2 = sum_2 + 50;
if(sum_2==num) printf("需要%d张100,需要%d张50\n",i_1,i_2);
}
}
i_1++;
sum_1 = sum_1 + 100;
if(sum_1==num) printf("需要%d张100\n",i_1);
}
}
return 0;
}