c – 确定硬币组合的算法

前端之家收集整理的这篇文章主要介绍了c – 确定硬币组合的算法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近面临着一个编程算法的提示,我不知道该怎么做.我从来没有真正写过一个算法,所以我是一个这样的新手.

问题是写一个程序,以确定收银员的所有可能的硬币组合,作为基于硬币值和硬币数量的变化作为替代.例如,可能有一个4个硬币的货币:2分,6分,10分和15分硬币.有多少组合等于50美分?

我使用的语言是C,尽管这并不重要.

编辑:这是一个更具体的编程问题,但是如何分析C中的字符串来获取硬币值?他们在文本文档中给出了

4 2 6 10 15 50

(这里的数字对应于我给出的例子)

解决方法

这似乎有点像分区,除了你在1:50中不使用所有的整数.它也似乎类似于bin包装问题,略有不同:

> Wikipedia: Partition (Number Theory)
> Wikipedia: Bin packing problem
> Wolfram Mathworld: Partiton

其实在考虑之后,是an ILP,NP-hard.

我建议一些动态的编程appyroach.基本上,您将定义一个值“余数”,并将其设置为您的目标(例如50).然后,在每一步,您将执行以下操作:

找出可以适合剩下的最大的硬币
>考虑如果你(A)包括硬币或(B)不包括那个硬币会发生什么.
>对于每个场景,递归.

所以如果剩余的是50,最大的硬币是25和10,你会分两种情况:

1. Remainder = 25,Coinset = 1x25
2. Remainder = 50,Coinset = 0x25

下一步(每个分支)可能如下所示:

1-1. Remainder = 0,Coinset = 2x25 <-- Note: Remainder=0 => Logged
1-2. Remainder = 25,Coinset = 1x25
2-1. Remainder = 40,Coinset = 0x25,1x10
2-2. Remainder = 50,0x10

每个分支将分成两个分支,除非:

>剩下的是0(在这种情况下你会记录它)>剩下的是小于最小的硬币(在这种情况下你会丢弃它)>没有更多的硬币留下(在这种情况下,你会丢弃它,因为剩余!= 0)

猜你在找的C&C++相关文章