2011-07-15 63 views
0

最近我一直在阅读关于乐透购物和组合生成。我想我会试试看,看看代码。我设法根据一些VB拼凑了一个数字轮,但是在移植它时引入了一个有趣的错误。 http://www.xtremevbtalk.com/showthread.php?t=168296生成组合

它允许你基本上识别任何组合。你给它提供N个数字,K个选择和一个索引,并按照字典顺序返回这个组合。 它在低值时效果很好,但随着球的数量(N)的增加,我会得到更多的数字,例如。 40个球,2个镐。第780号组合返回40和41!我增加的选项和数字越高,这似乎发生在运行结束时,前面的数字是由于循环而产生的。

我找到方法来产生可能组合的数量在VB论坛没有做出很大的意义,所以我发现了一个简单的办法: http://www.dreamincode.net/code/snippet2334.htm 后来我发现,用双打似乎引起分辨率不足。使用长时间的工作,但现在我不能使用更高的N值,因为乘法超出范围很长!然后我尝试了ulong,小数也没有超过26-28的数字(N)。 所以我恢复到VB网站上的版本。 http://www.xtremevbtalk.com/showthread.php?s=6548354125cb4f312fc555dd0864853e&t=129902

的代码,以避免击中96位天花板的方法,并声称自己是能够计算高达如N 98,K 49 出于某种原因,我不能得到这个行为,就吐出了一些很奇怪数字。

放弃一段时间后,我决定重新阅读维基建议。虽然其中大部分都在我的头上,但我能够发现计算二项式系数的某些方法具有不准确性。这对于你基本上拨号(转向)游戏的系统来说并不合适。经过一番搜索和阅读我碰到这个: http://dmitrybrant.com/2008/04/29/binomial-coefficients-stirling-numbers-csharp

原来,这正是我正在寻找的信息!第一种方法对于我所做的任何事情都是准确和快速的。非常感谢psychotic去加入只是在这里张贴的麻烦!

回答

1

确实有780个组合的2个数字可以从一组40中产生。如果您的组合生成器使用从零开始的索引,那么任何索引> =组合的最大数量将是无效的。 您可以使用binomial coefficient来确定可以形成的组合数量。

+0

@Trinnexx - 修改原来的问题。 –

+0

这篇文章的大部分都在我头上。在最后的工作中发现了这种方法,但也有浮点不准确。然而,通常寻找二项式系数导致了一篇关于精确计算它们的文章。 http://dmitrybrant.com/2008/04/29/binomial-coefficients-stirling-numbers-csharp 这种组合方法对于主角过去45(N)的欢呼声。 – Trinnexx

+0

关于您的国旗,请使用与其他账户相同的电子邮件,我可以快速合并这两个账户。一旦拥有,请再次举报。 –