• 【笔记】贪心算法找零钱(C#实现)


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

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

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

    View Code
     1 using System;
    2 using System.Collections.Generic;
    3 using System.ComponentModel;
    4 using System.Data;
    5 using System.Drawing;
    6 using System.Linq;
    7 using System.Text;
    8 using System.Windows.Forms;
    9
    10 namespace test
    11 {
    12 public partial class Form1 : Form
    13 {
    14 public Form1()
    15 {
    16 InitializeComponent();
    17 }
    18
    19 private void buttonOk_Click(object sender, EventArgs e)
    20 {
    21 if (listMoney.Items.Count != 0) //第二次计算就清空,便于重复计算
    22 listMoney.Items.Clear();
    23
    24 var money = Exchange(Convert.ToDecimal(txtMoney.Text));
    25
    26
    27 foreach (var single in money)
    28 {
    29 if (single.Value != 0)
    30 {
    31 string s = string.Format("{0}元---->{1}张 ", single.Key, single.Value);
    32 listMoney.Items.Add(s);
    33 }
    34 }
    35
    36 }
    37 Dictionary<decimal, int> GetInit() //初始化字典
    38 {
    39 Dictionary<decimal, int> money = new Dictionary<decimal, int>();
    40
    41 //key表示钱,value表示钱的张数
    42 money.Add(100.00M, 0);
    43 money.Add(50.00M, 0);
    44 money.Add(20.00M, 0);
    45 money.Add(10.00M, 0);
    46 money.Add(5.00M, 0);
    47 money.Add(2.00M, 0);
    48 money.Add(1.00M, 0);
    49 money.Add(0.50M, 0);
    50 money.Add(0.20M, 0);
    51 money.Add(0.10M, 0);
    52
    53 return money;
    54 }
    55
    56 Dictionary<decimal, int> Exchange(decimal num)
    57 {
    58 var money = GetInit();
    59
    60 int i = 0;
    61
    62 while (true)
    63 {
    64 if (num < 0.1M)
    65 {
    66 if (num > 0.05M)
    67 {
    68 money[0.10M]++; //大于0.05的时候给顾客0.1.
    69 return money;
    70 }
    71 else
    72 return money; //否则就算了
    73 }
    74
    75 var max = money.Keys.ElementAt(i); //取得面值
    76
    77 if (num >= max)
    78 {
    79 num = num - max;
    80 money[max] ++; //money的张数自增
    81 }
    82 else
    83 i++; //就去取下一张面值
    84 }
    85 }
    86 }
    87 }



  • 相关阅读:
    java equals与==的区别
    java中switch能否使用String作为参数?
    java九种数据类型以及封装类
    JavaWeb-----------------Json(一)
    JavaWeb-----------Ajax页面局部刷新(三)
    Linux下的C语言读写练习(二)
    Nginx HTTP负载均衡和反向代理的配置与优化
    kafka端口和zookeeper端口
    Correct the classpath of your application so that it contains a single, compatible version of org.springframework.util.Assert
    nginx简介&nginx基本配置和优化
  • 原文地址:https://www.cnblogs.com/lazycoding/p/2321210.html
Copyright © 2020-2023  润新知