知识大全 找零算法

Posted

篇首语:宝剑锋从磨砺出,梅花香自苦寒来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 找零算法相关的知识,希望对你有一定的参考价值。

  说到算法 可能很多人都会和笔者一样有种晦涩艰深望而却步之感(当然对于那些灰常聪明精于算法的童鞋又另当别论) 在我们向技术高峰攀登的时候 处处都有算法这只传说中的技术老虎的身影 有时它还会突然跳出来挑战一下我们脆弱的小心脏 但是本篇介绍的这个灰常简单 曾经是某对日外包公司的笔试题 笔者甚至不知它能不能被称之为 算法 请不要皱眉 看看不会妨碍您阅读的心情的

  一 问题还原

  商场买东西的时候 营业员需要找零 现在有面额为 元 元 元 元 元 元 元 角 角 角 分 分和 分的人民币若干 问 如何找零才能使现金最优发放(也就是说同一找零金额下 找零发放的人民币数量最少)

  二 经典解法

  实现如下

  代码

  class Program

  

  //人民币面额

  private static decimal[] moneyArr = new decimal[] M M M M M M M M M M M M M ;

  //存各种面额的人民币发放份数

  private static int[] moneyCountList = null;

  static void Main(string[] args)

  

  decimal currentMoney = M;

  int[] moneyCount = Calculate(currentMoney);

  Console WriteLine( 当前需找零金额 ¥ currentMoney);

  for (int i = ; i < moneyCount Length; i++)

  Console WriteLine( 面额 ¥ 共 张 moneyArr[i] moneyCount[i]);

  Console ReadLine();

  

  /// <summary>

  /// 计算发放金额数

  /// </summary>

  /// <param name= money ></param>

  /// <returns></returns>

  static int[] Calculate(decimal money)

  

  moneyCountList = new int[] ;

  int tmpMoney = NumHelper(money);

  while (tmpMoney > )

  

  for (int i = ; i < moneyArr Length; i++)

  

  if (tmpMoney >= NumHelper(moneyArr[i]))

  

  tmpMoney = NumHelper(moneyArr[i]); //减去一份发放的面额

  moneyCountList[i] += ;//对应的发送份数+

  break;

  

  

  

  return moneyCountList;

  

  /// <summary>

  /// 将金钱转换成整数处理

  /// </summary>

  /// <param name= money ></param>

  /// <returns></returns>

  static int NumHelper(decimal money)

  

  return Convert ToInt (money * );

  

  

  如你所看到的那样 简单的加减法就可以算出来 这实际上就是我们小时候数学课上做过的按照面额的从大到小进行 穷举

  当然你可能会说加减没有乘除来的快 我们稍作改进

  代码

  class Program

  

  //人民币面额

  private static decimal[] moneyArr = new decimal[] M M M M M M M M M M M M M ;

  //存各种面额的人民币发放份数

  private static int[] moneyCountList = null;

  static void Main(string[] args)

  

  decimal currentMoney = M;

  int[] moneyCount = Calculate(currentMoney);

  Console WriteLine( 当前需找零金额 ¥ currentMoney);

  for (int i = ; i < moneyCount Length; i++)

  Console WriteLine( 面额 ¥ 共 张 moneyArr[i] moneyCount[i]);

  Console ReadLine();

  

  /// <summary>

  /// 计算发放金额数

  /// </summary>

  /// <param name= money ></param>

  /// <returns></returns>

  static int[] Calculate(decimal money)

  

  moneyCountList = new int[] ;

  int tmpMoney = NumHelper(money);

  while (tmpMoney > )

  

  for (int i = ; i < moneyArr Length; i++)

  

  if (tmpMoney >= NumHelper(moneyArr[i]))

  

  int result = tmpMoney / NumHelper(moneyArr[i]); //直接除 比一条一条减算的快

  moneyCountList[i] = result;//对应的发送份数

  tmpMoney = tmpMoney % NumHelper(moneyArr[i]); //余数

  break;

  

  

  

  return moneyCountList;

  

  /// <summary>

  /// 将金钱转换成整数处理

  /// </summary>

  /// <param name= money ></param>

  /// <returns></returns>

  static int NumHelper(decimal money)

  

  return Convert ToInt (money * );

  

  

cha138/Article/program/net/201311/13853

相关参考

知识大全 算法及算法设计要求

第三课本课主题算法及算法设计要求教学目的掌握算法的定义及特性算法设计的要求教学重点算法的特性算法设计要求教学难点算法设计的要求授课内容一算法的定义及特性定义ispass(intnum[][])inti

知识大全 数据结构之算法和算法分析[1]

  算法与数据结构的关系紧密在算法设计时先要确定相应的数据结构而在讨论某一种数据结构时也必然会涉及相应的算法下面就从算法特性算法描述算法性能分析与度量等三个方面对算法进行介绍  算法特性  算法(Al

知识大全 算法分析

算法分析.评价算法好坏的标准  求解同一计算问题可能有许多不同的算法究竟如何来评价这些算法的好坏以便从中选出较好的算法呢?  选用的算法首先应该是正确的此外主要考虑如下三点①执行算法所耗费的时间②执行

知识大全 数据结构之算法和算法分析[2]

  算法与数据结构是相辅相承的解决某一特定类型问题的算法可以选定不同的数据结构而且选择恰当与否直接影响算法的效率反之一种数据结构的优劣由各种算法的执行来体现  要设计一个好的算法通常要考虑以下的要求 

知识大全 数据结构之算法和算法分析[4]

  一个算法是由控制结构和原操作构成的其执行时间取决于两者的综合效果为了便于比较同一问题的不同的算法通常的做法是从算法中选取一种对于所研究的问题来说是基本运算的原操作以该原操作重复执行的次数作为算法的

知识大全 数学小故事20字五个

数学小故事20字五个1、数学小故事——找零钱一家手杖店来了一个顾客,买了30元一根的手杖.他拿出一张50元的票子,要求找钱.店里正巧没有零钱,店主到邻居处把50元的票子换成零钱,给了顾客20元的找头.

知识大全 概论- 算法的描述和分析(二)

  算法分析  评价算法好坏的标准  求解同一计算问题可能有许多不同的算法究竟如何来评价这些算法的好坏以便从中选出较好的算法呢?  选用的算法首先应该是正确的此外主要考虑如下三点  ①执行算法所耗费的

知识大全 算法的描述

算法的描述  数据的运算通过算法(Algorithm)描述讨论算法是数据结构课程的重要内容之一.算法  非形式地说算法是任意一个良定义的计算过程它以一个或多个值作为输入并产生一个或多个值作为输出()一

知识大全 排序算法的各趟排序算法

  以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态  ()直接插入排序()希尔排序()冒泡排序()快速排序  ()直接选择排序()堆排序()归并排序()基数排序  上述方

知识大全 排序算法的各趟排序算法

  以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态  ()直接插入排序()希尔排序()冒泡排序()快速排序  ()直接选择排序()堆排序()归并排序()基数排序  上述方