王道OJ题作业答案-作业8

1、问题描述:

Description:某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

Input:无输入

Output:一个数,表示共有多少种换法

Sample Input 1:无       Sample Output 1:不能告知,因为只有一个数,偷偷告诉你小于100

2、思路说明:

本题可以用穷举法暴力求解,每种钞票的数目依次循环递增,最后保证总的金额数是100元,且钞票数是40即可,这就是一种换法,利用循环不断尝试,最后得出总的换法。

3、代码:

复制代码
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int sum=100;//总金额为100
 5     int a,b,c,d;//a,b,c,d分别表示10元、5元、2元、1元面值的钞票
 6     int count=0;//用来计算方法的种类
 7     //暴力求解法
 8     //由于每种钞票都至少有一张,所以a,b,c,d的初始值都是1
 9     for(a=1;a<10;a++)//100元全部换成10元的,至多有10张
10     {
11         for(b=1;b<20;b++)//100元全部换成5元的,至多有20张
12         {
13             for(c=1;c<40;c++)//100元全部换成2元的,至多有50张,但题目要求总数正好40张,因此至多有40张
14             {
15                 for(d=1;d<40;d++)//100元全部换成21元的,至多有100张,但题目要求总数正好40张,因此至多有40张
16                 {
17                     if(a+b+c+d==40&&a*10+b*5+c*2+d==100)//要求金额总数为100元,且正好40张
18                     {
19                         count++;//记录换的方法
20                     }
21                 }
22             }
23         }
24     }
25     //其实对于题目的每种钞票至少有一张,可以进一步缩小a,b,c,d的范围限制
26     //此处只进行了粗略计算
27     printf("%d",count);
28 }
复制代码

 

posted @   Alkaid*  阅读(187)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示