Description
我们知道人民币有1、2、5、10、20、50、100这几种面值。
现在给你n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。
比如4元,能用4张1元、2张1元和1张2元、2张2元,三种表示方法。
Input
输入有多组,每组一行,为一个整合n。
输入以0结束。
Output
输出该面额有几种表示方法。
代码一:
#include<stdio.h> int main() { int a,b,c,d,e; int n,count; while(scanf("%d",&n)!=EOF) { count=0; for(a=0;a<=5;a++) for(b=0;b<=10;b++) for(c=0;c<=25;c++) for(d=0;d<=50;d++) for(e=0;e<=250;e++){ if (a*50+b*25+c*10+d*5+e==n&&a+b+c+d+e<=100) count++; } printf("%d/n",count); } return 0; }代码二 :最里面的一层循环, 省略掉。写成e=n-a*50-b*25-c*10-d*5;同时每层循环的 ,终止点 加 一层 剪枝:判断 e是否 大于0代码:#include<stdio.h> int main() { int a,b,c,d,e; int n,count; while(scanf("%d",&n)!=EOF) { count=0; for(a=0;a<=5;a++) for(b=0;b<=(n-a*50)/25;b++) for(c=0;c<=(n-a*50-b*25)/10;c++) for(d=0;d<=(n-a*50-b*25-c*10)/5;d++) { e=n-a*50-b*25-c*10-d*5; //if (e>=0&&a+b+c+d+e<=100) printf("%d %d %d %d %d/n",a,b,c,d,e); if (e>=0&&a+b+c+d+e<=100) count++; } printf("%d/n",count); } return 0; }代码三:打表法:代码:#include<stdio.h> int s[250]; int main() { int a,b,c,d,e,f,g,sum; for(a=0;a<=2;a++) for(b=0;b<=5;b++) for(c=0;c<=12;c++) for(d=0;d<=25;d++) for(e=0;e<=50;e++) for(f=0;f<=120;f++) for(g=0;g<=250;g++) { sum=a*100+b*50+c*20+d*10+e*5+f*2+g; if (sum>250||a+b+c+d+e+f+g>100) break; s[sum]++; } int n; while(scanf("%d",&n)!=EOF&&n!=0) { printf("%d/n",s[n]); } return 0; }