中国的彩票选号,例如36选7,从36个数字中随机选取7个,这在算法上如何实现呢?
最简单的想法就是,每次都从1~36随机选取一个数,一共选7次,不就可以了吗?
但这样会有一个问题——重复。彩票选号是不能重复的,这也即是说如果你第一次选到的数是10,那么以后再从1~36中选数的时候,10就不能再选了。
有人可能会说了,这还不好办,如果重复了就废掉,重新再选一个呗。
这的确是一种解决方法,但是会有很大的问题,比如说5选4吧,前三个都已经选好了是2,3,4,现在取第4个数,这种情况下,取到1和5的几率要比取到2,3,4的几率还要小,也就是说,最坏的情况下,有可能会取很多次2,3,4,扔掉很多次,才最终能取到1或5,完成4个随机数字的选择。显然,这样效率是有很大问题的。
下面就介绍一种算法:抽牌算法,来实现这种不允许重复的选号,同时不会出现这种效率上的问题。
[separator]
抽牌算法的核心思想如下:
以36选7为例
一副牌,一共36张,抽出其中一张牌,放到一边,再从剩下的牌中抽出第二张,放到一边……以此类推,直到抽完了7张牌为止。
很显然,这样抽牌是绝对不会重复的。而其核心就是抽出的牌要放到一边。
用算法如何实现呢?
其实很简单,只要能模拟实现把抽出的牌放到一边这个概念就可以了,而模拟实现的方法是非常简单的:把一个数组模拟成一个牌盒,用数组里存的数模拟牌,而抽出的牌放到一边的动作,只需进行一次数组交换,把它放到数组的末尾即可。
以36选7为例
初始化数组,其结构为[1,2.....35,36]
第一轮,从1~36序号中选取随机序号,抽取到序号7, 把序号7和序号36的值交换,7放到数组的末尾,数组结构变成[1...6,36,8......34,35,7]
第二轮,从1~35序号中选取随机序号,抽取到7(这时位置7所存的数就是36了),把36和35交换,数组结构就变成了[1..6,35,8...34,36,7]
第三轮,从1~34序号中选取随机序号,抽取到5,把5和34交换,数组结构变成了[1...4,34,6,35,8....5,36,7]
...
每一次,都把抽出的“牌”放到数组的最后,然后再抽牌时,就不抽最后那张牌,这样就实现了抽出的牌放到一边这样一个概念。
请看以下Java代码:
分享到:
相关推荐
得彩易彩票旋转矩阵选号杀号王双色球专用版的问世,解决了您的烦恼,您只要下载使用了,软件就会主动成为您的好帮手,让您中奖不再是梦想! 本公司双色球项目开发小组根据组里多名长年研究彩票双色球的专家的成果,...
用java编写的一个模拟彩票随机出号程序 每次可以随机产生类似于双色球的号码
VB6.0实现彩票36选7选号程序,功能:生成14个过滤条件值保存DB,查询指定期的前X期开出的个数,七期随机选号法,统计每个号码出球规律,"随机选下注数据,从选定号码中遍历组合,在选中号码列表中继续筛选等。...
自己写的一个可以自动生成彩票号码的小软件,算法预测部分后续添加,目前只能随机产生符合规则的号码
3D选号程序delphi源码,中文注释 没有用.net和第三方控件,D7通过
VB仿真的彩票开奖程序,模拟随机投注,模拟开奖,包括有随机选号程序,随机生成号码,包括36选7和22选5算法。具体定义:Dim intBasicNum As Integer, intSelNum As Integer, lngNumber As Long '基本号码个数,每注选...
一个VC 随机选号程序,可用于幸运号码抽奖、彩票号码选择等,结果排列可以从大到小或从小到大,可从随机数列的中间选号,程序还支持高级参数设置,以便生成合乎要求的随机数列。
说明,模仿《彩票第六感》,一个马马虎虎的彩票选号程序,比较小,程序应该有存在Bug。 两种实现筛选号码的方法: 1 . 生成随机数,看选中的次数最多的"个数"数字放到"选定号码里" 2 . 生成随机数,看选中...
内容索引:VB源码,算法相关,双色球,包号程序 双色球一直是我爱玩的一种彩票,但我中奖的机率却没有几次。后来我越发觉得,其它彩票有一些特定的规律: 1、范围。所有的数字加起来,不可能小于一个阶段,也不可能...
彩票任我赢,一种独特的彩票计算软件 详细介绍了真正的[旋转矩阵] 实现算法,与传统的选M保N 有本质的不同。 含 自动更新、号码过滤、智能分析、检索知识库等功能
前些日子在淘宝上买了一阵子彩票,每次都是使用淘宝的机选,每次一注。后来觉得不如自己写一个机选的程序有意思 1. xuanhao.py文件 import random def getResultStr(totalCount, resultCount): elements = [x + 1...
最全面的双色球定位+和值+大底+余数分析
用html+css+javascript实现的模拟机选双色球,通过定时器模拟选出一组或多组号码,可以将选择的号码进行排序,添加到列表中,导出excel,分页等操作,除此外还实现了图片的上传预览等功能......
实例154 猴子选大王算法的实现 200 实例155 使用MD5算法对密码进行加密 201 实例156 凯撒密码算法的实现 202 第2篇 Windows窗体篇 第7章 Windows窗体基础 206 7.1 设置窗体位置 207 实例157 控制窗体加载时的位置 ...
2.5 选择类控件应用 83 实例066 利用选择控件实现权限设置 83 实例067 利用选择控件实现复杂查询 85 2.6 ListView控件应用 87 实例068 ListView控件间的数据移动 87 实例069 将数据库数据添加到ListView控件 90...