题目链接:换零钞
时间限制: 1 Sec 内存限制: 256 MB
题目描述:
x星球的钞票的面额只有:100元,5元,2元,1元,共4种。
小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱。
小明有点强迫症,他坚持要求200元换出的零钞中2元的张数刚好是1元的张数的10倍,剩下的当然都是5元面额的。
银行的工作人员有点为难,你能帮助算出:在满足小明要求的前提下,最少要换给他多少张钞票吗?
(5元,2元,1元面额的必须都有,不能是0)
输出:
输出一个整数表示答案
题意:就是把200元换成1元,2元,5元的零钱(5元,2元,1元面额的必须都有,不能是0),并且2元钞票的张数是1元钞票张数的10倍,输出所换零钱的最小张数。
思路:就是我们让1元钞票的数量从1开始遍历,这样就能算出1元和2元的钞票兑换了多少零钱,然后判断剩余的零钱是否可以整除5,如果可以那就可以跳出循环了(我们是从1开始遍历的,所以第一个符合情况的就是所换零钱的最小张数了)。
完整代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<stack>
#include<set>
#include<map>
#include<queue>
#include<iomanip>
#include<algorithm>
typedef long long ll;
using namespace std;
int main()
{
int money_100=2,money_1=0,money_2=0,money_5=0; //分别代表不同面额零钱的数目
int money_sum=200,sum=0; // sum为所有零钱的钞票数量
for(int i=1;i<50;i++)
{
money_1=i;
money_2=10*i;
int temp=money_sum-money_1-money_2*2; //临时变量代表的是换完1元2元后的剩余金额
/*cout<<money_1<<endl; // 测试的部分,打印出来方便自己观察
cout<<money_2<<endl;
cout<<temp<<endl;
cout<<temp%5<<endl;
cout<<endl;*/
if((temp%5)==0) // 判断剩余的金额是否可以完全换为5元的面额
{
money_5=temp/5;
sum+=(money_1+money_2+money_5);
break;
}
}
cout<<sum<<endl;
return 0;
}
聪明的小可爱们看完别忘了点赞哟,感谢支持!
加油!
共同努力!
Keafmd