貪心法求解硬幣問題 ( 結構體排序 sort函式
阿新 • • 發佈:2022-05-06
Description
有1分、2分、5分、10分、50分和100分的硬幣各若干枚,現在要用這些硬幣來支付W元,最少需要多少枚硬幣?
Input
輸入為2行,第一行為浮點數W,表示需要支付W元。接下來6行,每行一個整數Ni,表示1分、2分、5分、10分、50分和100分的硬幣的枚數。
輸入資料保證有解。
Output
輸出為一行,表示最少需要的硬幣的個數。 程式碼:#include <iostream> #include<algorithm> #include <map> using namespace std; struct coin{int value; int num; }; int n=6; int a[6]={1,2,5,10,50,100}; bool cmp(coin a,coin b){ return a.value>b.value; } int main() { int count=0; struct coin coins[6]; float money; cin>>money; money=money*100; for(int i=0;i<n;i++){ cin>>coins[i].num; coins[i].value=a[i]; } sort(coins,coins+n,cmp); int i=0; while(money>0&&i<n){ //cout<<"money"<<money<<endl; if(coins[i].num>0&&money>=coins[i].value){//選擇 money=money-coins[i].value; //cout<<"coins[i].value"<<coins[i].value<<endl;//cout<<"coins[i].num"<<coins[i].num<<endl; coins[i].num--; count++; }else{ i++; } } cout<<count; return 0; }
結果:
輸入樣例有5個1分,2個2分,4個5分,1個10分,1個50分,1個100分。
取2個2分,2個5分,1個10分組成0.24元,共需要5枚硬幣。
關於sort:
標頭檔案:
#include<algorithm>
使用方法:
struct coin{ int value; int num; };
bool cmp(coin a,coin b){ return a.value>b.value; }
//定義宣告一個結構體coins
sort(coins,coins+n,cmp);