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

浙公网安备 33010602011771号