c语言 贪心算法 找零钱,贪心算法-找零钱(C#实现)

找零钱这个问题很清楚,无非就是始终拿可以取的最大面值来找,最后就使得张数最小了,这个实现是在假设各种面值足够多的情况下。

首先拖出一个界面来,最下面是一个listbox控件

0a3c5b32df8cfb77008ed8b1117a79d7.png

对应的代码:问题比较简单,有注释

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace test

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void buttonOk_Click(object sender, EventArgs e)

{

if (listMoney.Items.Count != 0)   //第二次计算就清空,便于重复计算

listMoney.Items.Clear();

var money = Exchange(Convert.ToDecimal(txtMoney.Text));

foreach (var single in money)

{

if (single.Value != 0)

{

string s = string.Format("{0}元---->{1}张 ", single.Key, single.Value);

listMoney.Items.Add(s);

}

}

}

Dictionary GetInit()  //初始化字典

{

Dictionary money = new Dictionary();

//key表示钱,value表示钱的张数

money.Add(100.00M, 0);

money.Add(50.00M, 0);

money.Add(20.00M, 0);

money.Add(10.00M, 0);

money.Add(5.00M, 0);

money.Add(2.00M, 0);

money.Add(1.00M, 0);

money.Add(0.50M, 0);

money.Add(0.20M, 0);

money.Add(0.10M, 0);

return money;

}

Dictionary Exchange(decimal num)

{

var money = GetInit();

int i = 0;

while (true)

{

if (num < 0.1M)

{

if (num > 0.05M)

{

money[0.10M]++; //大于0.05的时候给顾客0.1.

return money;

}

else

return money;  //否则就算了

}

var max = money.Keys.ElementAt(i);  //取得面值

if (num >= max)

{

num = num - max;

money[max] ++;   //money的张数自增

}

else

i++;  //就去取下一张面值

}

}

}

}

组合优化学习笔记&lt&semi;之&gt&semi;从贪心算法到子集系统再到拟阵

贪心算法是用的比较多的一种优化算法,因为它过程简洁优美,而且结果有效.有些优化问题如最大权森林(MWF)是可以用贪心问题求解的,由于最小支撑树(MST)问题与MWF是等价的,所以MST也是可以用贪心算 ...

Java找零钱算法

买东西过程中,卖家经常需要找零钱.现用代码实现找零钱的方法,要求优先使用面额大的纸币,假设卖家有足够数量的各种面额的纸币. 下面给出的算法比较简单,也符合人的直觉:把找零不断地减掉小于它的最大面额的纸 ...

Java实现 蓝桥杯 算法训练 找零钱

试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

【算法笔记】B1037 在霍格沃茨找零钱

1037 在霍格沃茨找零钱 (20 分) 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特( ...

剑指offer:剪绳子(找规律,贪心算法,动态规划)

1. 题目描述 /* 题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1] ...

js算法初窥05(算法模式02-动态规划与贪心算法)

在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...

JavaScript算法模式——动态规划和贪心算法

动态规划 动态规划(Dynamic Programming,DP)是一种将复杂问题分解成更小的子问题来解决的优化算法.下面有一些用动态规划来解决实际问题的算法: 最少硬币找零 给定一组硬币的面额,以及 ...

python常用算法(6)——贪心算法,欧几里得算法

1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...

『嗨威说』算法设计与分析 - 贪心算法思想小结(HDU 2088 Box of Bricks)

本文索引目录: 一.贪心算法的基本思想以及个人理解 二.汽车加油问题的贪心选择性质 三.一道贪心算法题点拨升华贪心思想 四.结对编程情况 一.贪心算法的基本思想以及个人理解: 1.1 基本概念: 首先 ...

随机推荐

UVa 297 Quadtrees -SilverN

A quadtree is a representation format used to encode images. The fundamental idea behind the quadtre ...

Codeforces Beta Round &num;2

A题,神题意题.. #include #include #include #include

转 纯CSS设置Checkbox复选框控件的样式

Checkbox复选框是一个可能每一个网站都在使用的HTML元素,但大多数人并不给它们设置样式,所以在绝大多数网站它们看起来是一样的.为什么不把你的网站中的Checkbox设置一个与众不同的样式,甚至 ...

【转】UVALive 5964 LCM Extreme --欧拉函数

题目大意:求lcm(1,2)+lcm(1,3)+lcm(2,3)+....+lcm(1,n)+....+lcm(n-2,n)+lcm(n-1,n)解法:设sum(n)为sum(lcm(i,j))(1& ...

hibernate10--命名查询

<?xml version="1.0"?> /p>

SQL语句汇总(二)——数据修改、数据查询

SQL语句第二篇,不说废话直接开始吧. 首先创建一张表如下,创建表的方法在上篇介绍过了,这里就不再赘述. 添加新数据: INSERT INTO () VA ...

Redis-5&period;0&period;0集群配置

版本:redis-5.0.0 参考:http://redis.io/topics/cluster-tutorial. 集群部署交互式命令行工具:https://github.com/eyjian/re ...

Libre 6006 「网络流 24 题」试题库 &sol; Luogu 2763 试题库问题 (网络流,最大流)

Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流) Description 问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同 ...

网页排版的时候不要忘了table标签

[概况] DIV+CSS是WEB设计标准,它是一种网页的布局方法.与传统中通过表格(table)布局定位的方式不同,它可以实现网页页面内容与表现相分离.但有时候在布局的时候,纯粹的用div感觉嵌套的太 ...

安装 mysql5&period;7&period;2 (Ubuntu 16&period;04 desktop amd64)

1.下载mysql deb https://dev.mysql.com/downloads/mysql/ #移动到/usr/local/src/目录,解压 sudo mv mysql-server_5 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值