贪心算法解决钱币找零问题

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Coin
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] value = new int[] { 1, 2, 5, 10, 20, 50, 100 };
            int[] count = new int[] { 3, 0, 2, 1, 0, 3, 5 };
            int[] result = new int[count.Length+1];//将每个面额的货币使用数量记录下来,最后一个记录找零的情况
            CoinMoneny(600,value,count,result);//600块进行找零
            foreach (var item in result)//将找零的情况进行输出
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
        /// <summary>
        /// 对货币进行找零
        /// </summary>
        /// <param name="money"></param>
        /// <param name="value"></param>
        /// <param name="count"></param>
        /// <param name="result"></param>
        public static void CoinMoneny(int money,int[] value,int[] count,int[] result)
        {
            if (money <= 0)//先判断是否有找零的必要
            {
                return;

            }
            int temp = value.Length - 1;//先从最大面额进行找零
            while(true)
            {
                if(money>value[temp]*count[temp])//最大面额总数小于找零数
                {
                    result[temp] = count[temp];//将最大面额所有的数量全部记录到数组中
                    money -= value[temp] * count[temp];//将最大面额使用完后的找零钱数
                }
                else//最大面额总数大于找零数
                {
                    result[temp] = money / value[temp];//按照实际情况把找零的数量记录
                    money -= result[temp] * value[temp];//还剩下的找零数
                }
                temp = temp - 1;//检测下一个面额的钱币
                if(temp<0||money<=0)//终止查找
                {
                    break;
                }
            }
        }

    }
}

原文地址:https://www.cnblogs.com/zhangyang4674/p/11319931.html

时间: 2024-10-12 15:46:44

贪心算法解决钱币找零问题的相关文章

贪心算法解硬币找零问题

假如有一种货币,它有面值为1分.2分.5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱? 按照贪心算法的思想,需要不断地使用面值最大的硬币.如果要找零的值小于最大的硬币值,则尝试第二大的硬币,依次类推. 代码如下: #include <iostream> using namespace std; #define ONE 1 #define TWO 2 #define FIVE 5 #define TEN 10 int main() { int money; int one=0,two=0

贪心算法解决会场安排问题

贪心算法解决会场安排问题. [问题描述] 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.(这个问题实际上是著名的图着色问题.若将每一个活动作为图的一个顶点,不相容活动间用边相连.使相邻顶点有不同颜色的最小着色数,相应于要找的最小会场数.) [数据输入] 由文件input.txt给出输入数据,第一行又一个正整数K,表示有K个待安排的活动. 接下来有K行数据,每行有两个正整数,分别表示K个待安排的活动的开始时间和结束时间. [结束输出] 输出最少会场数. input.txt    

可用贪心算法解决的几个基本问题

可用贪心算法解决的几个基本问题 分类: 算法2011-08-24 12:36 950人阅读 评论(0) 收藏 举报 算法活动作业c 关键:看问题有没有贪心选择性质和最优子结构性质.有些问题看似是可以用贪心算法,但是实际用贪心算法却得不到最优解.构造贪心算法后,需要一定的证明来确定它的正确性.常用证明方法:反证法.调整法. 几个基本问题: 1. 活动安排问题. 设有n个活动的集合e={1,2,-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动

贪心算法解决加油站选择问题(未解决)

//贪心算法解决加油站选择问题 //# include<iostream> # include<stdio.h> using namespace std; # include<algorithm> struct Node { float p, d; }; bool cmp(Node a, Node b) { return a.d < b.d; } int main() { Node node[501]; float Cmax, D, Davg, distance,

算法笔记——硬币找零之最少硬币数

题目来源:NYOJ995 问题描述: 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资. 我们应该注意到,人民币的硬币系统是 100,50,20,10,5,2,1,0.5,0.2,0.1,0.05, 0.02,0.01 元,采用这些硬币我们可以对任何一个工资数用贪心算法求出其最少硬币数. 但不幸的是: 我们可能没有这样一种好的硬币系统, 因此用贪心算法不能求出最少的硬币数,甚至有些金钱总数还

算法笔记_048:找零问题(Java)

目录 1 问题描述 2 解决方案 2.1 动态规划法   1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < ... < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < ... < dm的硬币,其中d1 = 1,且每种硬币数量无限可得) 2 解决方案 2.1 动态规划法 本文编码思想参考自<算法设计与分析基础>第三版,具体讲解如下: 具体代码如下: package com.liuzhen.chapt

零基础学贪心算法

本文在写作过程中参考了大量资料,不能一一列举,还请见谅.贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关.解题的一般步骤是:1.建立数学模型来描述问题:2.把求解的问题分成若干个子问题:3.对每一子问题求解,得到子问题的局部最优解:4.把子问题的局部最优

某种 找换硬币问题的贪心算法的正确性证明

一,问题介绍 最近一直在看贪心算法的正确性证明(如何证明贪心算法获得的解一定是最优解),感觉“剪枝”技巧用得比较多.再看了下<算法导论>中贪心算法一章里面的一个练习---找换硬币问题.这个问题对于某些 面值的硬币 是有最优解的,故记录下其中的一些证明思路. 考虑用最少的硬币数 来找 n 分钱的问题,假设每个硬币的值都是整数. 如果可换的硬币的单位是 c 的幂,也就是 c0,c1,... ,ck ,其中整数 c>1,k>=1 证明贪心算法总可以产生一个最优解. 二,找换硬币的贪心策略

从零开始学贪心算法

本文在写作过程中参考了大量资料,不能一一列举,还请见谅. 贪心算法的定义: 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关. 解题的一般步骤是: 1.建立数学模型来描述问题: 2.把求解的问题分成若干个子问题: 3.对每一子问题求解,得到子问题的局部最优解: 4.把子