双色球

最近身边很多人玩双色球。。我也买了几期。

下面是双色球模拟程序,代码如下:

package Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import Test.util.ConnectionUtil;

/**6个为红球(1—33),1个为蓝球(1—16)*/
public class ColorBall {

	public static void main(String[] args) {
		try {
			Connection conn=ConnectionUtil.getConnection();
			Statement stmt = conn.createStatement();
			PreparedStatement ps=null;
			String sql = "insert into ball values(BALLID_SEQ.NEXTVAL,?,?,?,?,?,?,?,sysdate)";
			ps=conn.prepareStatement(sql);
		
			//循环购买双色球2400000注
			for(int c=0;c<2400000;c++){
				List luckBalls=makeLuck();
				for(int i=0;i<luckBalls.size();i++){
					String num=Integer.toString((Integer)luckBalls.get(i));
					ps.setString(i+1,num);
				}
				ps.executeUpdate();
			}
			
			stmt.close();
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//产生一期幸运球
	public static List makeLuck(){
		List balls=new ArrayList();
		List luckBalls=new ArrayList();
		for(int i=0;i<33;i++){
			balls.add(i+1);
		}
		for(int i=0;i<6;i++){
			int luckIndex=(int)(Math.random()*(balls.size()));
			luckBalls.add(balls.get(luckIndex));
			balls.remove(luckIndex);
		}
		luckBalls.add((int)(Math.random()*16)+1);
		return luckBalls;
	}
	
}

数据库情况:

建表语句:

-- Create table
create table BALL
(
  OPENID   VARCHAR2(10) not null,
  RED1     VARCHAR2(10) not null,
  RED2     VARCHAR2(10) not null,
  RED3     VARCHAR2(10) not null,
  RED4     VARCHAR2(10) not null,
  RED5     VARCHAR2(10) not null,
  RED6     VARCHAR2(10) not null,
  BLUE1    VARCHAR2(10) not null,
  DATETIME DATE
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    next 8
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table BALL
  add constraint ID primary key (OPENID)
  using index 
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate indexes 
create unique index IDX_TEST on BALL (OPENID DESC)
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

买完彩票后数据库情况:

SQL> SELECT count(*) FROM ball;
 
  COUNT(*)
----------
   2400000


第二天查看中奖情况

从我的数据库中查询,看是否有满足中奖的条目:

--第2013083期 05 06 12 14 19 23 09
SQL> SELECT * FROM (
  2  SELECT * FROM (
  3  SELECT * FROM (
  4  SELECT * FROM ball WHERE blue1='9' and (red1+red2+red3+red4+red5+red6)=(05+06+12+14+19+23)
  5  and (red1=6 or red2=6 or red3=6 or red4=6 or red5=6 or red6=6))
  6  WHERE (red1=5 or red2=5 or red3=5 or red4=5 or red5=5 or red6=5))
  7  WHERE (red1=12 or red2=12 or red3=12 or red4=12 or red5=12 or red6=12))
  8  WHERE (red1=14 or red2=14 or red3=14 or red4=14 or red5=14 or red6=14);
 
OPENID     RED1       RED2       RED3       RED4       RED5       RED6       BLUE1      DATETIME
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -----------
904191     14         22         12         20         6          5          9          
2066183    5          12         14         20         22         6          9          2013/7/19 9


当前情况分析:

买了240万注彩票,人民币240*2万=480万元,有两注满足四个红球和一个蓝球满足条件,中奖200*2=400元。

 

中头等奖的概率和出门被车撞死的概率的比较:

中头等奖的概率:

SELECT 1/((33*32*31*30*29*28)/(6*5*4*3*2*1)*16) FROM dual  --1/17721088

出门被车撞死的概率:

我们用2005年的车祸资料来说明一下,2005年全国共发生道路交通事故450254起,造成98738人死亡。
以13亿人每人平均300次出门来计算,2005出门被车撞死的概率很小 = 98738 /(13亿*300) 约等于千万分之2。
就是说一个人出门1千万次,有两次被撞死的可能

两个概率的关系:

SELECT (2/10000000)/(1/17721088) FROM dual  --3.5442176

也就是说中头奖的概率为你出门被车撞死概率的3.5倍多,并且还是在一年之内。

 

posted @ 2013-07-19 18:32  javawebsoa  Views(544)  Comments(0Edit  收藏  举报