[讨论]如何找出同组出现的次数最多的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的数组。全部赋值。
接下来就看数组中哪个元素最多了。找到这个元素。次数、哪里出现都可以解决了。
不过有个问题就是这种算法速度太慢。各位高手能不能找出更好的算法? 是做福利彩票统计程序吧?呵呵 我觉的不用这么麻烦,先构造一个数组C(1 to 29),用于保存20期中每个数字出现的次数。然后取消一期,如:9 11 14 15 19 21 24 22,分别判断它们在C中的次数,最大的三个应该就是所求的吧。
不知道这样的思路对不对。 myfreemind发表于2004-1-8 18:29:00static/image/common/back.gif是做福利彩票统计程序吧?呵呵
是统计彩票用的,不过是别人统计用的。在excelhome里面看到这个帖子,我用excel的vba编了这个一个统计三个数同期出现的最大次数。就是用我在一楼的思路,但我觉得这个算法运算太慢了。想看看是否有更好的算法。 efan2000发表于2004-1-8 18:58:00static/image/common/back.gif我觉的不用这么麻烦,先构造一个数组C(1 to 29),用于保存20期中每个数字出现的次数。然后取消一期,如:9 11 14 15 19 21 24 22,分别判断它们在C中的次数,最大的三个应该就是所求的吧。
不
这样求出来的应该是出现次数最大的三个数吧?但不能保证这是同期出现次数最多的三个数啊。我用一楼的思路写了个程序(见附件),能用。但我想知道有没有更好的算法。
在构造数组之前先过滤一些不可能的组合:
设实际号码的连乘积为A,每一个组合的连乘积为B,
则A/B不为整数时,这个组合不会出现在某一期中。
页:
[1]