用编程实现双色球彩票系统的产生,首先我们想到的就是利用随机数的产生方法来产生一组随机数从而实现彩票系统的编写,但是这样有个问题就是双色球的红球1-33个数从中选六个数是不能够重复的,而随机数是随机产生的,所以每次产生都可能与以前产生的数字相同,所以我们就需要判断,产生相同的数字时在重新产生其他的数,从而达到彩票系统数字不重复的目的。下面是我自己的想法写的算法实现不重复随机数的产生:

import java.util.*;
public class LotteryTicket {
  public static void main(String[] args){
    boolean flag=true;
    int count=0;

    //定义两个数组,分别表示红球和蓝球
    int []ary1=new int[33];
    int []ary2=new int[16];
    for(int j=0;j<16;j++){
      ary2[j]=j+1;
    }
    int b=random(16,1);
    while(flag){

      //将红球的数组全部赋值为零
      for(int i=0;i<33;i++){
        ary1[i]=0;
      }
      for(int i=0;i<6;i++){

        //将产生的随机数分赋值给相应的数组中的元素,如果产生重复的随机数将赋给同一个数组元素
        int a=random(33,1);
        ary1[a-1]=a;
      }
      for(int i=0;i<33;i++){

        //计算数组中的非零元素
        if(ary1[i]!=0){
          count++;
        }
      }

      //如果数组中有六个元素则表示产生了六个不同的随机数,小于六就说明产生的随机数中有重复的
      if(count<6){flag=true;}
      else if(count>=6){flag=false;}
      count=0;
    }

    //如果跳出了上个循环就说明了产生了六个不同的随机数,就将数组中非零的随机数打印出来
    System.out.print("红色球产生的随机数是:");
    for(int i=0;i<33;i++){
      if(ary1[i]!=0){
        System.out.print(" "+ary1[i]);
      }
    }
    System.out.print("\n蓝色球产生的随机数是:");
    System.out.print(" "+ary2[b-1]);
  }

  //这是一个产生随机数的方法

  public static int random(int n1,int n2){
    int a=(int)(Math.random()*n1+n2);
    return a;
  }
}

  我的想法有奇怪,虽然正确产生了六个不同的随机数,但是并没有实际的实用性,因为在正真的彩票产生数字时,是一个一个出来的数字,而我产生随机数过程中是先判断六个不同的随机数符合条件了,然后再输出结果。虽然结果相同,但是如果放到实际显示中,很难这样实现。所以以后写算法的同时还要考虑它的显示意义与算法的效率问题。

posted on 2014-04-09 22:13  leaf-blog  阅读(2996)  评论(0编辑  收藏  举报