1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,会有很多种兑换方案。请编写程序给出各种兑换方案。输入格式:输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照5分硬币从少到多排列的。输出格式:显示前n种方案中5分、2分、1分硬币各多少枚。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。注意:如果全部方案不到n种,就顺序输出全部可能的方案。
输入样例:
5
输出样例:
1 46 53
2 42 56
3 38 59
4 34 62
5 30 65
我的思路比较简单粗暴,就是所谓的暴力枚举。
先说一下我的思路:我提前算出总共会有几种情况,答案是12种
#include"stdio.h"
int main()
{
int x,y,z,k=0;
for(int x=1;x<=150;x++)
{
for(int y=1;y<=150;y++)
{
for(int z=1;z<=150;z++)
{
if(x+y+z==100&&5*x+2*y+z==150)
{
printf("%d %d %d\n",x,y,z);
k++;
}
}
}
}
printf("%d",k);
return 0;
}
//k就是12;你们也可试试
那么好,当我们知道总共也就12种可能,那么如果n>12,就让n==12,即可。
上代码^o^
#include"stdio.h"
int x,y,z,n,k=0,flag=0;
int main()
{
scanf("%d",&n);
if(n>12)
n=12;
for(x=1;x<=150;x++)
{
for(y=1;y<=150;y++)
{
for(z=1;z<=150;z++)
{
if(x+y+z==100&&5*x+2*y+z==150)
{
printf("%d %d %d\n",x,y,z);
k++;
if(k==n)
{
flag=1;
break;
}
}
}
if(flag==1)
break;
}
if(flag==1)
break;
}
return 0;
}
这个题易错的点在3重for循环,在满足条件时你需要跳出3次for循环,ok没了^o^,是不是简单粗暴啊
这篇文章讲述了如何用C语言编写程序,通过暴力枚举的方式解决1元5角硬币兑换问题,找出所有可能的n种兑换方案。





