C语言救急!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/21 18:27:18
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
将一笔零钱(大于8分,小于1元, 精确到分)换成5分、2分和1分的硬币。
输入金额,问有几种换法?针对每一种换法,输出各种面额硬币的数量和硬币的总数量,要求每种硬币至少有一枚。先输出硬币总数量少的换法。
我是这样编的#include "stdio.h"
int main(void)
{
int count, fen1, fen2, fen5, money;
int repeat, ri;

scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &money);
count=0;
for(fen1=1;fen1<=money;fen1++)
for(fen2=1;fen2<=money/2;fen2++)
for(fen5=1;fen5<=money/5;fen5++)
if(fen5*5+fen2*2+fen1==money){
printf("fen5:%d,fen2:%d,fen1:%d,total:%d\n",fen5,fen2,fen1,fen5+fen2+fen1);
count ++;}

}
printf("count = %d\n", count);

}不对啊。。不能最后实现从小到大排序!!!高手帮忙啊啊啊啊啊啊~~~~

很明显,你的思路是错的

你的想法是,先从5分的开始,将能换成5分的最大个数记下来,将剩余的钱再转换成2分的最大个数,以此类推.
但是你用一个数实验之后,就会发现它并不是大面值的硬币越多,硬币总数就越少.

改改你的算法吧,在这个基础上稍微改一下就行了