一、问题描述
X 星球的钞票的面额只有:100 元,5 元,2 元,1 元,共 4 种。
小明去 X 星旅游,他手里只有 2 张 100 元的 X 星币,太不方便,恰好路过 X 星银行就去换零钱。
小明有点强迫症,他坚持要求 200 元换出的零钞中 2 元的张数刚好是 1 元的张数的 10 倍,剩下的当然都是 5 元面额的。
银行的工作人员有点为难,你能帮助算出:在满足小明要求的前提下,最少要换给他多少张钞票吗?(5 元,2 元,1 元面额的必须都有,不能是 0)
二、题目要求
考察
数学思想,循环判断 建议用时5~15min
三、问题分析
我读完题目就有了一个大概的思路,把握住问题的整体思路之后就可以轻松的解决掉这一题。
首先,问题的关键就在于能否求出最少的钞票数量,那么想要钞票数量少,该怎么办?面值必须要大啊!
所以,我一开始就考虑5元的数量达到最大,依次向下递减,直到找到符合下面的两个条件的钞票数目,输出结果。在if循环里面关键的两个判断条件如下:
条件1: 3种钞票的总面值必须要等于200 条件2: 2元的张数刚好是1元的张数的10倍
四、编码实现
usingnamespacestd; intmain() { inti,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";//输出最后的结果 } } } } return0; }
五、输出结果
输出具体的结果为:74