硬币面值组合
总时间限制: 1000ms 内存限制: 65536kB
描述
使用1角、2角、5角硬币组成 n 角钱。
设1角、2角、5角的硬币各用了a、b、c个,列出所有可能的a, b, c组合。
输出顺序为:先按c的值从小到大,若c相同则按b的值从小到大。
输入
一个整数n(1 <= n <= 100),代表需要组成的钱的角数。
输出
输出有若干行,每行的形式为:
i a b c
第1列i代表当前行数(行数从001开始,固定3个字符宽度,宽度不足3的用0填充),后面3列a, b, c分别代表1角、2角、5角硬币的个数(每个数字固定12个字符宽度,宽度不足的在左边填充空格)。
样例输入
10
样例输出
001 10 0 0
002 8 1 0
003 6 2 0
004 4 3 0
005 2 4 0
006 0 5 0
007 5 0 1
008 3 1 1
009 1 2 1
010 0 0 2
来源
习题(15-2)
思路点拔:还是一个简单的枚举,使用三重循环来枚举这三种面值,就是注意一下循环顺序,我觉得可以不用多说了,上代码!!
#include<cstdio>
int main()
{
int n,tot=0; //tot用来记录方案数
scanf("%d",&n);
for(int k=0;k<=n/5;k++) //枚举5角的个数
{
for(int j=0;j<=n/2;j++) //枚举2角的个数
{
for(int i=n;i>=0;i--) //枚举1角的个数
{
if(i+j*2+k*5==n) //如果符合要求
printf("%03d%12d%12d%12d\n",++tot,i,j,k); //输出一组解
}
}
}
return 0;
}
//放心,不会超时