7-21 人民币兑换
(30分)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
有三种方法
一、三层循环
#include<stdio.h>
int main()
{
int x,y,z;
int n,count=0;
scanf("%d",&n);
for(x=1;x<30;x++)//x为5分硬币的个数
{
for(y=1;y<75;y++)//y为2分硬币的个数
{
for(z=1;z<150;z++)//z为1分硬币的个数
{
if(x+y+z==100&&5*x+2*y+z==150)
{
count++;
if(count<=n)
printf("%d %d %d\n",x,y,z);
}
}
}
}
}
二、两层循环
三、一层循环
这道题可以列两个方程
x-5分,y-2分,z-1分
5x+2y+z=150
x+y+z=100
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int x,y,z,count=0;
for(x=1;x<30;x++)//x为5分硬币的个数
{
z=3*x+50;//分别用x表示z,y
y=50-4*x;
if(z>1&&y>1)写出x,y的条件
{
count++;
if(count<=n)
printf("%d %d %d\n",x,y,z);
}
}
}