【发布时间】:2017-06-09 03:20:33
【问题描述】:
我必须为这个任务找到一个解决方案:
“超市越来越多地配备了自动收银机。这些资金中的大多数只接受信用卡支付,尽管很大一部分消费者仍然支付现金(用纸币和硬币)。
现金支付遇到的问题之一是货币的呈现:如何以最佳方式获得给定的金额,即使用最少数量的硬币和纸币?这是我们每个人每天都会遇到的问题,更不用说自动收银机了。
在这个练习中,我被要求尝试找到一个在特定情况下进行零钱的最佳解决方案:当自动收银机只包含 2 欧元硬币、5 欧元和 10 欧元纸币时。
为简化问题,我们将考虑所有这些硬币和纸币的数量都是无限的。
金钱的回报由 Currency 对象表示。该物品有3个属性:piece2、billet5和billet10,分别存储2欧元、5欧元票和10欧元票的硬币数量。
例如,如果我们以表的示例 2(6 €)为例,我们应该得到一个 Money 对象:
- Piece2 价值 3(3 件 2 €)
- Ticket5 值 0(没有 5 欧元的票)
- Ticket10 值 0(没有 10 欧元的票)
任务:实现 MonnaieOptimale(int s) 方法,该方法返回一个 Currency 对象,其中包含总和为 s 的硬币和纸币。如果无法返回币种(如示例1),则返回null。
为了达到最佳效果,解决方案总是必须尽可能以最少数量的硬币和门票进行更改。”
数据:s 始终是小于或等于 9223372036854775807 的严格正整数(长整数)
建议??
【问题讨论】:
-
你可以用简单的数学自组织算法来解决它,因为你事先知道了名目。只需“在纸上”解决它,您就会明白如何在 C# 中解决它。附言如果事先不知道名词,则可以使用动态规划解决问题,但需要
O(s)时间,这对您的情况来说是不够的。 -
提示:当您需要将其增加到 10 时,使用名义 2 或名义 5 的硬币从不最佳,因此每 N 使用 10*N .
-
统一分配?
-
“实现 MonnaieOptimale(int s) 方法,该方法返回一个包含总和为 s 的硬币和纸币的货币对象”似乎是问题中已经存在的可靠建议。
-
到目前为止你尝试过什么?另外,请不要发布代码图像,将其发布为文本。另外,你能改进问题本身的措辞吗?请看:Why is “Can someone help me?” not an actual question?