问题描述:
我们知道人民币有1、2、5、10、20、50、100这几种面值。
现在给你n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。
比如4元,能用4张1元、2张1元和1张2元、2张2元,三种表示方法。
输入有多组,每组一行,为一个整合n。
输入以0结束。
输出该面额有几种表示方法
解决方法:
#include <iostream>
#include <vector>
using namespace std;
void parse(int t)
{
int n,p2,p5,p10,p20,p50,p100,p1;
long long num;
n = t;
num=0;
for(p2=0;p2<=125;p2++)
for(p5=0;p5<=(n-p2*2)/5;p5++)
for(p10=0;p10<=(n-p2*2-p5*5)/10;p10++)
for(p20=0;p20<=(n-p2*2-p5*5-p10*10)/20;p20++)
for(p50=0;p50<=(n-p2*2-p5*5-p10*10-p20*20)/50;p50++)
for(p100=0;p100<=(n-p2*2-p5*5-p10*10-p20*20-p50*50)/100;p100++)
{
p1=n-p2*2-p5*5-p10*10-p20*20-p50*50-p100*100;
if(p1>=0&&(p1+p2+p5+p10+p20+p50+p100<=100))
num++;
}
printf("%d\n",num);
}
int main()
{
int in = 0;
vector<int> vec;
while(cin >> in)
{
if (in != 0)
{
//cout<<in<<endl;
vec.push_back(in);
}
else
{
break;
}
}
for (int i=0;i<vec.size();i++)
{
parse(vec[i]);
}
return 0;
}