「这是我参与2022首次更文挑战的第32天,活动详情查看:2022首次更文挑战」
一、问题描述
X 星球的钞票的面额只有:100 元,5 元,2 元,1 元,共 4 种。
小明去 X 星旅游,他手里只有 2 张 100 元的 X 星币,太不方便,恰好路过 X 星银行就去换零钱。
小明有点强迫症,他坚持要求 200 元换出的零钞中 2 元的张数刚好是 1 元的张数的 10 倍,剩下的当然都是 5 元面额的。
银行的工作人员有点为难,你能帮助算出:在满足小明要求的前提下,最少要换给他多少张钞票吗?(5 元,2 元,1 元面额的必须都有,不能是 0)
二、题目要求
考察
1.数学思想,循环判断
2.建议用时5~15min
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
三、问题分析
我读完题目就有了一个大概的思路,把握住问题的整体思路之后就可以轻松的解决掉这一题。
首先,问题的关键就在于能否求出最少的钞票数量,那么想要钞票数量少,该怎么办?面值必须要大啊!
所以,我一开始就考虑5元的数量达到最大,依次向下递减,直到找到符合下面的两个条件的钞票数目,输出结果。在if循环里面关键的两个判断条件如下:
条件1: 3种钞票的总面值必须要等于200
条件2: 2元的张数刚好是1元的张数的10倍
四、编码实现
#include<iostream>
using namespace std;
int main()
{
int i,j,k,n=200;//初始化数据,i,j,k分别代表5 2 1面值
for(i=39;i>=1;i--)//让五元面值的钞票数量最多
{
for(j=1;j<=100;j++)//二元面值的钞票数目
{
for(k=1;k<=200;k++)//一元面值的钞票数目
{
if(5*i+2*j+k==n&&j==10*k)//满足上面提到的两个条件即可
{
cout<<i+j+k<<"\n";//输出最后的结果
}
}
}
}
return 0;
}
五、输出结果
输出具体的结果为:74