subtlation 发表于 2004-1-8 17:53:00

[讨论]如何找出同组出现的次数最多的3个数?(提供思路就行)

问问各位高手:假定下面每一行是一组数,如何找出同组出现的次数最多的3个数?
9      11      14      15      19      21      24      22
1      9      11      13      16      19      25      26
4      5      7      16      18      20      25      24
7      13      21      23      27      28      29      16
1      2      10      15      16      19      23      24
8      9      11      15      16      17      30      3
2      5      9      16      18      19      27      26
2      5      14      19      23      25      26      27
5      7      11      12      13      19      21      8
5      11      12      16      23      24      28      27
1      3      7      12      21      26      29      27
2      8      9      10      18      20      24      23
7      10      16      17      19      23      27      3
我的算法是:
假定计算的是三个同期数字,共有20期。
每期的8个数字中进行排列组合(数字从小到大排列)应该共有(8*7*6)/(3*2*1)=56种排列。
把这些排列全部列出来。(每个数字可以用“,”分开,比如 9,11,13)
如果用程序就构造一个56*20的数组。全部赋值。
接下来就看数组中哪个元素最多了。找到这个元素。次数、哪里出现都可以解决了。
不过有个问题就是这种算法速度太慢。各位高手能不能找出更好的算法?

myfreemind 发表于 2004-1-8 18:29:00

是做福利彩票统计程序吧?呵呵

efan2000 发表于 2004-1-8 18:58:00

我觉的不用这么麻烦,先构造一个数组C(1 to 29),用于保存20期中每个数字出现的次数。然后取消一期,如:9 11 14 15 19 21 24 22,分别判断它们在C中的次数,最大的三个应该就是所求的吧。
不知道这样的思路对不对。

subtlation 发表于 2004-1-9 14:09:00


是统计彩票用的,不过是别人统计用的。在excelhome里面看到这个帖子,我用excel的vba编了这个一个统计三个数同期出现的最大次数。就是用我在一楼的思路,但我觉得这个算法运算太慢了。想看看是否有更好的算法。

subtlation 发表于 2004-1-9 14:13:00


这样求出来的应该是出现次数最大的三个数吧?但不能保证这是同期出现次数最多的三个数啊。我用一楼的思路写了个程序(见附件),能用。但我想知道有没有更好的算法。

Mrqq18 发表于 2004-1-9 16:06:00

在构造数组之前先过滤一些不可能的组合:
设实际号码的连乘积为A,每一个组合的连乘积为B,
则A/B不为整数时,这个组合不会出现在某一期中。
页: [1]
查看完整版本: [讨论]如何找出同组出现的次数最多的3个数?(提供思路就行)