http://noi.openjudge.cn/ch0201/7621/
描述
使用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
代码
#include <iostream>
#include <iomanip> //setw() setfill()
using namespace std;
int main()
{
int n;
cin>>n;
int x,y,z;
int i=0;
for(z=0; z<=n/5; z++)
{
for(y=0; y<=(n-z*5)/2; y++)
{
x=n-z*5-y*2;
i++;
cout<<setw(3)<<setfill('0')<<i;
cout<<setw(12)<<setfill(' ')<<x<<setw(12)<<y<<setw(12)<<z<<endl;
}
}
return 0;
}