Description
某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?
Input
无输入
Output
一个数,表示共有多少种换法
Sample Input 1
无
Sample Output 1
不能告知,因为只有一个数,偷偷告诉你小于100
方法一:
#include <stdio.h>
int main() {
int a,b,c,d,sum,count;
int num=0;
for(a=1;a<40;a++){
for(b=1;b<40;b++){
for(c=1;c<40;c++){
for(d=1;d<40;d++){
count=a+b+c+d;
sum=10*a+5*b+c*2+d;
if(sum==100&&count==40){
num+=1;
}
}
}
}
}
printf("%d\n",num);
return 0;
}
- 优点:
- 变量
count
被明确计算并检查以确保四个数字的总和为40,这可能是为了提前排除那些不会通过第二个条件的组合。- 缺点:
- 计算
count
和sum
两次,可能导致性能下降,因为这些计算可以在内部循环中合并。
方法二:
#include <stdio.h>
int main() {
int a,b,c,d,num=0;
for(a=1;a<40;a++){
for(b=1;b<40;b++){
for(c=1;c<40;c++){
for(d=1;d<40;d++){
if(a+b+c+d==40&&10*a+5*b+2*c+1*d==100){
//num+=1;
num++;
}
}
}
}
}
printf("%d\n",num);
return 0;
}
- 优点:
- 在条件语句中直接检查张数和票面值和,这样只计算一次,提高了效率。
- 缺点:
- 条件语句中的顺序可能引起混淆,因为它是先检查总和再检查加权和,这可能不如显式计算
count
然后比较来得清晰。