有1、2、5、10、20、50、100七种面值的硬币,要支付指定的金额,问怎么支付所用的硬币个数最少。这是一个非常日常化的问题,凭直觉我们会想 到,尽可能先用大面值的硬币,这就是“贪心选择”。 以下为代码示例: /// <summary> /// 经典算法贪心法之最少硬币 /// </summary> /// <param name="num">指定的金额</param> public void GetCoinNum(int num) { int sumNum = 0; int needNum = 0; int[] numList = new int[] { 1, 2, 5, 10, 20, 50, 100 }; string console = ""; for (int i = (numList.Length-1); i >= 0; i--) { //得到当前面值的硬币所需个数 needNum = num / numList[i]; console += needNum.ToString() + "个面值为" + numList[i].ToString()+"的硬币;"; if (num % numList[i] > 0) { num = num - (numList[i] * needNum); } else { num = 0; } //累加共需几个硬币 sumNum += needNum; } console = string.Format("共需{0}个硬币,分别为:{1}{2}", sumNum, Environment.NewLine, console); Console.WriteLine(console); }