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

身边一直有玩彩票的朋友,曾经有一天,朋友说让我开发一个帮助他买彩票的软件,当时连面向对象都没有搞清楚的我,

硬是弄了一个给他,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 block
			e1.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 block
				e.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 block
			e.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+"秒.");
	}

}


猜你喜欢

转载自blog.csdn.net/icemaker88/article/details/50686666
今日推荐