钱币找零问题-贪心算法解析

cpp 复制代码
#include <iostream> 

using namespace std;

#define N  7 

int counts[N] = { 3, 2, 0, 3 ,2 ,0 , 1 };
int value[N] = { 1, 2, 5, 10, 20, 50, 100 }; 
int cot[N] = { 0, 0, 0, 0 ,0 ,0 , 0 };

int solve(int money) {
	int num = 0; //支付了几张纸币
	int i = 0;

	for (i = N - 1; i >= 0; i--) {
		int j = money / value[i]; //对应的纸币要给几张
		//有这么多给对应的钱,没有那些有多少给多少
		int c = j > counts[i] ? counts[i] : j; 

		cout << "需要面值" << value[i] << "的纸币" << c << "张" << endl;
		money -= c * value[i]; //还剩多少要给
		num += c; 

		if (money == 0) { break; }
	}
	if (money > 0) { num = -1; } //不能完全支付

	return num;
}

int main() {
	int money = 0;
	int num = 0;

	cout << "请输入要支付的数目:\n";
	cin >> money;

	num = solve(money);

	if (num == -1) {
		cout << "支付失败!" << endl;
	}
	else {
		cout << "成功支付款项:" << num << endl;
	}

	system("pause");
	return 0;
}
相关推荐
NAGNIP9 小时前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP9 小时前
一文搞懂激活函数!
算法·面试
董董灿是个攻城狮9 小时前
AI 视觉连载7:传统 CV 之高斯滤波实战
算法
爱理财的程序媛15 小时前
openclaw 盯盘实践
算法
端平入洛16 小时前
auto有时不auto
c++
MobotStone19 小时前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
颜酱1 天前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
用户5757303346241 天前
两数之和:从 JSON 对象到 Map,大厂面试官到底在考察什么?
算法
程序猿追1 天前
“马”上行动:手把手教你基于灵珠平台打造春节“全能数字管家”
算法