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

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;
}
相关推荐
不正经学生2 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
毕竟是shy哥5 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲5 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
恋恋西风5 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx5 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_6 小时前
C++(22)——类型转换和IO流
开发语言·c++
晊晌_h6 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦7 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考7 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
浪里镖客8 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵