题目链接:换零钞
时间限制: 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; }