1. 程式人生 > 其它 >貪心法求解硬幣問題 ( 結構體排序 sort函式

貪心法求解硬幣問題 ( 結構體排序 sort函式

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);