C++小练习—找零钱问题

本文通过C++编程实现贪心算法来解决找零钱问题,以元和角为单位分别进行处理。示例中展示了如何找到找零57.8元的最佳组合,包括10元、5元、1元、5角、2角和1角硬币的使用情况。
摘要由CSDN通过智能技术生成

采用贪心算法解决找零钱问题,如果需要找零57.8元,零钱数分别为(10元、5元、1元、5角、2角、1

1、采用元为单位编写程序如下所示:

#include<iostream>

using namespace std;

int main()
{
	float total=0.0;
	cout<<"请输入需要找的零钱数:";
	cin>>total;
	float sum=total;
	const float a[]={10,5,1,0.5,0.2,0.1};
	int i,b[6]={0};
	for(i=0;i<6;++i)
	{
		b[i]=total/a[i];
		total=total-b[i]*a[i];
	}
	cout<<"得到的结果为:"<<sum<<"=";
	for( i=0;i<5;
好的,这是一个经典的贪心算法问题。我们假设有一些硬币,它们的面值为 1,5,10,20,50,100 元。现在需要找给顾客一定数量的零钱,问如何用最少的硬币数找给顾客? 我们可以使用贪心算法来解决这个问题。具体做法如下: 1. 首先将硬币按面值从大到小排序。 2. 从面值最大的硬币开始,不断地用当前面值的硬币去尽量多地找零,直到找完或者不能再找为止。然后再用下一个面值的硬币去找零,以此类推。 3. 直到找完所有需要找的零钱为止。 下面是 C++ 的代码实现: ```c++ #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> coins = {100, 50, 20, 10, 5, 1}; // 硬币面值 vector<int> change(int n) { vector<int> result; for (int i = 0; i < coins.size() && n > 0; i++) { while (n >= coins[i]) { result.push_back(coins[i]); n -= coins[i]; } } return result; } int main() { int n = 123; vector<int> result = change(n); for (int i = 0; i < result.size(); i++) { cout << result[i] << " "; } return 0; } ``` 这里我们定义一个 `change` 函数,它接受一个正整数 `n`,表示需要找的零钱数,返回一个由硬币面值组成的向量 `result`,表示找零的方案。在函数中,我们按照硬币面值从大到小的顺序循环,每次用当前面值的硬币尽量多地找零,直到找完或者不能再找为止。最后返回找零方案即可。 注意,这个贪心算法的正确性是显然的,因为每次都使用当前面值的硬币尽量多地找零,所以能够保证找到最优解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值