贪心法求解硬币问题 ( 结构体排序 sort函数


Description

 有1分、2分、5分、10分、50分和100分的硬币各若干枚,现在要用这些硬币来支付W元,最少需要多少枚硬币?

Input

 输入为2行,第一行为浮点数W,表示需要支付W元。接下来6行,每行一个整数Ni,表示1分、2分、5分、10分、50分和100分的硬币的枚数。

输入数据保证有解。

Output

 输出为一行,表示最少需要的硬币的个数。   代码:
#include 
#include
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){
         cin>>coins[i].num;
         coins[i].value=a[i];
    }
    sort(coins,coins+n,cmp);
    
    int i=0;
    while(money>0&&i<n){
        //cout<<"money"<
        if(coins[i].num>0&&money>=coins[i].value){//选择 
            money=money-coins[i].value;
            
            //cout<<"coins[i].value"<//cout<<"coins[i].num"<
            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 

使用方法:

struct coin{
         int value;
         int num;
};

bool cmp(coin a,coin b){ return a.value>b.value; }
//定义声明一个结构体coins
sort(coins,coins+n,cmp);