首页 > 编程语言 >C/C++ 数据结构五大核心算法之贪心算法_钱币找零问题

C/C++ 数据结构五大核心算法之贪心算法_钱币找零问题

时间:2023-08-05 18:57:38浏览次数:45  
标签:int money C++ 问题 算法 num 找零 最优

贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。 贪婪算法所得到的结果往往不是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。 贪婪算法并没有固定的算法解决框架,算法的关键是贪婪策略的选择,根据不同的问题选择不同的策略。 其基本的解题思路为: 1.建立数学模型来描述问题 2.把求解的问题分成若干个子问题 3.对每一子问题求解,得到子问题的局部最优解 4.把子问题对应的局部最优解合成原来整个问题的一个近似最优解。

#include <iostream>
#include <Windows.h>
#define N 7
using namespace std;
int value[N] = { 1,2,5,10,20,50,100 };//纸币面值
int count1[N] = { 10,2,3,1,2,3,5 };//纸币数量
int solve(int money) {
    int num = 0;
    for (int i = N - 1; i >= 0; i--) {
        int j = money / value[i];
        int c = j > count1[i] ? count1[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 << "请输入要支付的零钱数目:";
    cin >> money;
    num = solve(money);
    if (num == -1) {
        cout << "抱歉,找不开" << endl;
    }
    else {
        cout << "成功的使用至少" << num << "张纸币实现找零!" << endl;
    }

    system("pause");
    return 0;
}

标签:int,money,C++,问题,算法,num,找零,最优
From: https://www.cnblogs.com/smartlearn/p/17608397.html

相关文章

  • C++可重入函数和不可重入函数
    转载:https://blog.csdn.net/weixin_41969690/article/details/108006834C++可重入函数和不可重入函数可重入函数是指能够被多个线程“同时”调用的函数,并且能保证函数结果正确不必担心数据错误的函数。不可重入函数是指不能运行在多任务环境下,除非能保证互斥的函数。由于使用......
  • 文心一言 VS 讯飞星火 VS chatgpt (71)-- 算法导论7.1 1题
    参照图7-1的方法,说明PARTITION在数组A=(13,19,9,5,12,8,7,4,21,2,6,11)上的操作过程。文心一言:PARTITION是一种常见的快速排序算法,其目的是将数组分成两个部分,使得其中一个部分的所有元素都小于另一个部分的所有元素。在这个过程中,最小的元素会被放在数组的最后一个位置。以下是在数组A=(......
  • 文心一言 VS 讯飞星火 VS chatgpt (71)-- 算法导论7.1 1题
    参照图7-1的方法,说明PARTITION在数组A=(13,19,9,5,12,8,7,4,21,2,6,11)上的操作过程。文心一言:PARTITION是一种常见的快速排序算法,其目的是将数组分成两个部分,使得其中一个部分的所有元素都小于另一个部分的所有元素。在这个过程中,最小的元素会被放在数组的最后一个位置。以下是在数组......
  • 迪杰斯特拉算法
    迪杰斯特拉算法(单源最短路径)算法基本流程:node0asstart.注意算法流程默认图是联通的,若不联通,需要添加循环跳出处理。stepNode0Node1Node2Node3visitedpointset0(init)0INT_MAXINT_MAXINT_MAX{}10(√)31INT_MAX20(√)31(√)9......
  • 代码随想录-字符串-c++总结
    关于字符串string一些库函数的使用,不太熟悉,导致开始做的时候比较磕磕绊绊主要用到了<algorithm>中的reverse,以及string的resize,substr,erase等,在这贴一个C++字符串(string)常用操作总结-知乎(zhihu.com)C++的string库用法总结-知乎(zhihu.com)反转字符串||中,每2k个字符进......
  • C# 如何调用C++ dll string类型返回
    这篇文章主要介绍了C# 如何调用C++ dll string类型返回问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 −目录C#调用C++dllstring类型返回C++端:(定义返回数据为结构体Vector4)C#端:(接收返回的结构体Vector4)C#调用C++dll类型......
  • C/C++ 数据结构五大核心算法之回溯法-N皇后问题
    N皇后问题:在n*n的棋盘上要摆n个皇后,要求:任何两个皇后不同行,不同列也不在同一条斜线上,求给一个整数n,返回n皇后的摆法数。#include<iostream>#include<math.h>#defineN8usingnamespacestd;intq[N+1];//q[i]表示第i个皇后在第i行上的第q[i]列intcheck(i......
  • ITK在C++文件里面,可以这样调用开旁路的函数
    问题:如果直接在c++文件引入开旁路函数POM_AM__set_application_bypass,是编译不通过的(PS:好像是因为开旁路函数是用C写的,和C++不兼容,具体也不是很懂的,有懂的大佬,可以帮忙评论解答下) 解决方法:在c++文件前面加上这行extern"C"intPOM_AM__set_application_bypass(logicalbypa......
  • C++工厂模式简易实现
    C++工厂模式简易实现引言:动态绑定是面向对象编程的重要功能,但C++目前还没有纳入标准库的反射机制,所以为了更方便的动态构造对象,使得通过配置文件的方式改变派生类对象,而不需要去修改代码,所以可以使用工厂这一常见的设计模式,来完成类对象的动态构造。基于C++11的新特性和模板,实现......
  • 数据结构-算法-01-算法初步
     ......