[伪科学]如何使用程序探究彩票的奥秘

来源:互联网 发布:天龙八部手游 知乎 编辑:程序博客网 时间:2024/06/07 05:37
身边一直有玩彩票的朋友,曾经有一天,朋友说让我开发一个帮助他买彩票的软件,当时连面向对象都没有搞清楚的我,

硬是弄了一个给他,C#写的,完全用数组实现的,差不多包含了机选号码,号码分析,浏览器外链一个历史表等功能.

今日又突然想到这个事情,想用现在的技术再一次进行开发,除了用教好的方式再实现之前的功能外,在加入一些本人对数据的感悟(有一定的主观因素),来计算出彩票中奖号码,选定双色球这款比较热门的玩法来实现吧.

至于灵不灵就用时间来证明了,


第一步:机选号码

模拟双色球机选号码

package tool;import java.util.ArrayList;import java.util.Collections;import java.util.Date;import java.util.Random;import java.util.Timer;public class ChoseNumber {/**从给定的集合里随机选择一个数字 * @param inputList 包含一串数字的集合 * @return 结果数字 */private static int getNumber(ArrayList<Integer> inputList){Random ran =new Random();int i=ran.nextInt(inputList.size());return inputList.get(i);}/**从给定的范围里生成一个不包括排除列表里元素的集合 * @param start 开始值 * @param end 结束值 * @param out 排除列表 * @return 不包括排除列表里元素的集合 */private static ArrayList<Integer> makeArray(int start,int end,ArrayList<Integer> out){ArrayList<Integer> res=new ArrayList<Integer>();for (int i = start; i <= end; i++) {if (!out.contains(i)) {res.add(i);}}return res;}/**返回一个在指定范围内的指定个数的整数集合 * @param start 开始范围 * @param end 结束范围 * @param times 包含的整数个数 * @return 在 start 和 end 之间取 times 个 不重复的数字  */public static ArrayList<Integer> getListOnTimes(int start,int end,int times){ArrayList<Integer> out=new ArrayList<Integer>();int temp=0;for (int i = 0; i < times; i++) {temp=getNumber(makeArray(start,end,out));out.add(temp);}Collections.sort(out);return out;}public static void main(String[] args) {ArrayList<Integer> test=new ArrayList<Integer>();test=getListOnTimes(1,33,6);//取6个红球test.add(getListOnTimes(1,14,1).get(0));//取1个蓝球后组成一组号码System.out.println(test);}}


第二步:机选2000万组号码,作为研究数据,因为数据大,分成一次生成10万条,分200次生成,生成后记录到mysql数据库


建表sql:

DROP TABLE IF EXISTS `coculatenumber_2000w_index_copy`;CREATE TABLE `coculatenumber_2000w_index_copy` (  `id` int(11) NOT NULL auto_increment,  `r1` tinyint(4) NOT NULL,  `r2` tinyint(4) NOT NULL,  `r3` tinyint(4) NOT NULL,  `r4` tinyint(4) NOT NULL,  `r5` tinyint(4) NOT NULL,  `r6` tinyint(4) NOT NULL,  `b1` tinyint(4) NOT NULL,  `date` datetime default NULL,  `info` text,  PRIMARY KEY  (`id`),  KEY `r1` USING BTREE (`r1`),  KEY `r2` USING BTREE (`r2`),  KEY `r3` USING BTREE (`r3`),  KEY `r4` (`r4`),  KEY `r5` (`r5`),  KEY `r6` (`r6`),  KEY `b1` USING BTREE (`b1`),  KEY `allred` USING BTREE (`r1`,`r2`,`r3`,`r4`,`r5`,`r6`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

java代码:

package test;import java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import tool.ChoseNumber;import jdbc.DBHelper;public class Demo {public static void doByPart(int nums,int allnums,int start,int end,int all,String code){long starttime=(new Date()).getTime();ArrayList<Integer> test=new ArrayList<Integer>();int i=start;String sql ="";String info =code;SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");DBHelper db = new DBHelper();sql ="insert into coculatenumber_2000w_index SET r1=?, r2=?,r3=?,r4=?,r5=?,r6=?,b1=?,date=?,info=?";try {db.conn.setAutoCommit(false);db.pst=db.conn.prepareStatement(sql);} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}nums++;System.out.println("第"+nums+"部分生成中!共"+(end-start)+"条记录");while (i<end) {i++;//System.out.println("正在生成号码:"+i+"/"+all);test=ChoseNumber.getListOnTimes(1,33,6);test.add(ChoseNumber.getListOnTimes(1,16,1).get(0));try {db.pst.setInt(1, test.get(0));db.pst.setInt(2, test.get(1));db.pst.setInt(3, test.get(2));db.pst.setInt(4, test.get(3));db.pst.setInt(5, test.get(4));db.pst.setInt(6, test.get(5));db.pst.setInt(7, test.get(6));db.pst.setString(8, df.format(new Date()));db.pst.setString(9, info);db.pst.addBatch();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try {System.out.println("第"+nums+"部分写入中!共"+allnums+"部分");db.pst.executeBatch();db.conn.commit();db.conn.close();long endtime=(new Date()).getTime();long times=(endtime-starttime)/1000;System.out.println("第"+nums+"部分写入完成!用时"+times+"秒");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {int part=100000;int all=20000000;int times=all/part;if (all%part!=0) {times++;}long starttime=(new Date()).getTime();for (int i = 0; i < times; i++) {if (i*part<all&&i==times-1) {doByPart(i,times,i*part,all,all,"x008");}else {doByPart(i,times,i*part,(i+1)*part,all,"x008");}}long endtime=(new Date()).getTime();long ltimes=(endtime-starttime)/1000;System.out.println("操作完成!耗时:"+ltimes+"秒.");}}


0 0
原创粉丝点击