我也偶尔会玩玩lotto,用我自己写的一个程序来预测两组数字然后就去买彩票,中过两次很小很小的奖,一次30多元,还有一次20多元。如果你能搞到所有已开出奖的号码,倒是可以分析分析的,比如分析哪个数字出现的概率最高,各个数字出现的概率比例,以及如果将一组数字作为一个频率,那么所有组合就是一个频率组合,我们可以看到频率组合与时间轴的关系,通过这样的分析,大概的可以预测开奖的号码。
你的程序反正不急,最近我在赶学校的任务,等忙完一阵,再来帮你写这个程序。
我这几天反复的看了你们的帖子,我想我理解你们的意思了。
你的想法:
1。 事先自己设置一个筛选组合
2。自己设置筛选的规则
3。产生所有组合
4。遍历所有产生的组合,将符合规则的组合挑出来,并将其写入文件
是不是这样?
如果是这样?那么对于1。2。3。就有一些讲究了,首先来说 1。 你自己设置的筛选组合本身就应该符合 2。
比如 筛选组合1 :
1
2
3
9
20
筛选组合2:
1
2
3
18
21 而你设置的筛选规则如为:不出现3个相同的数字,那么现在你自己设置的筛选组合就有问题了, 你看, 1
2
3这3个数,在两个筛选组合中都出现了,所以你的筛选组合就设置的不合理。
再来说3。如果要产生所有组合,那么需要占据很大的内存,如果用常规方法是坐不下来的,如果采用Bit方式来模拟,需要中间有转换的过程。对于我所说的Bit方式模拟,不知道你有没有理解?如果不理解,我讲的详细些。我们有33个数。如果我将某一个位置代表了一个数,那么我是不是需要33个位置。而一个位置就是一个Bit,所以我们就需要33个Bit,但是计算机都是8个Bit 作为一个单位的,所以33正好是4个Byte多一个Bit,为此必须使用5个Byte,那么最高位的7个Bit 我们就不使用了。
那么我们怎么来产生所有的组合呢?方法是这样的:我们有了40个空的Bit,也就是40个零,我们通过一个加法器,每次加一,我用16进制,那么开始的时候就是 0x00000, 加一以后就是0x00001现在我们判断是否有7个Bit置一了,如果是的,我们将其还是以Bit的方式放入一个事先开辟好的内存空间。反复进行这个动作,直到那个开辟的空间满。那个内存空间是根据你们所提供的那个数据*5得出的。这样我们就有了那个所有组合。
接下来就是采用你的那个事先设置的筛选标准来筛选那个所有组合,那么我们就从所有组合中一次提取5个Byte,并根据Bit 1 的位置转换成10进制数字。 比如0x001c7 就是 1 2 3 7 8 9 用2进制就是
000111000111 。将这个10进制的数字组合与筛选组合中的组合进行比较,如果符合,则写入文件。这个动作反复进行,直到读完那个所有组合。
所以你看到,这里面有两次装换的过程,还有加法器的过程,这样会很花时间,不过除此之外,我想不出别的办法了。