贪心法求解硬币问题 ( 结构体排序 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>
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);

 

 

 

 

posted @ 2022-05-06 18:04  zhis  阅读(1047)  评论(0)    收藏  举报