>>>每日一题
/**
* @file
* @author jUicE_g2R(qq:3406291309)————彬(bin-必应)
* 一个某双流一大学通信与信息专业大一在读的技术彩笔
* @copyright 2023.6
* @COPYRIGHT 原创技术笔记:转载需获得博主本人同意,且需标明转载源
* @language C++
* @Version
*/
- UpData Log👆 2023.6.29 更新进行中
- Statement0🥇 一起进步
- Statement1💯
- 博主更多blog转:https://blog.csdn.net/qq_73928885?spm=1011.2124.3001.5343
1 找零问题-贪心算法
//23-6-29
题目描述
蓝桥商店的老板需要找零 nn 元钱。
钱币的面额有:100100 元、5050 元、2020 元、55 元、11 元,问如何找零使得所需钱币的数量最少?
注意:nn 可能为 00,也能为几百元(别问,问就是来着里微信提现来了)
输入描述
在第一行给出测试例个数 NN,代表需要找零的钱数。
1≤N≤105。
输出描述
输出共有 55 行,每一行输出数据输出找零的金额与数量,详情看样例。
示例
输入
365
输出
100:3 50:1 20:0 5:3 1:0
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void){
int amount; cin>>amount;
vector<int> changes={100,50,20,5,1};//仅需该面值
std::vector<int> cot(changes.size(),0);//面额降序排列,每种面额的张数
sort(changes.rbegin(), changes.rend());//对硬币面额进行降序排序
for(int i=0;i<changes.size();i++){//从最大的
while(amount>=changes[i]){
++cot[i];
amount-=changes[i];
}
}
if(amount!=0)//如果无法凑成金额,则返回空数组
cot.clear();//贪心的核心
for(int i=0;i<changes.size();i++)
cout<< changes[i] << ":" << cot[i] <<endl;
return 0;
}