題目連結:換零鈔
時間限制: 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