彩票数字随机算法:
1、 从开奖历史数据中取出最近10期红球的开奖号码,
{"084","02","10","20","26","28","29"},
  {"083","04","09","14","15","26","33"},
  {"082","02","04","11","18","22","29"},
  {"081","02","05","10","24","25","29"},
  {"080","04","09","14","15","16","27"},
  {"079","06","07","12","24","30","33"},
  {"078","08","15","22","24","28","33"},
  {"077","02","04","13","18","26","28"},
  {"076","11","18","22","27","29","30"},
  {"075","04","06","22","23","29","32"}
穷举其中所欲红球号码两两组合,存放入his[][2]:
"02","10"
"04","09"
"02","04"
"02","05"
"04","09"
"06","07"
"08","15"
"02","04"
"11","18"
"04","06""02","20"
"04","14"
"02","11"
"02","10"
"04","14"
"06","12"
"08","22"
"02","13"
"11","22"
"04","22""02","26"
"04","15"
"02","18"
"02","24"
"04","15"
"06","24"
"08","24"
"02","18"
"11","27"
"04","23"
……
2、 随机选出一个1-33的号码,再随机选出第2个号码;第一个号码和第二个号码的组合不存在于his[][]中。
3、 再随机选出第n个号码,第一个、第二个、第三个…第三n个号码的两两组合z[]最好不存在于his中,或者该两两组合z[]在his中出现的次数最低。这个算法怎么写?

解决方案 »

  1.   

    这个不是告诉你思路了吗?
    http://topic.csdn.net/u/20120730/15/73c8b3ee-a001-453e-915d-a456c2baadd2.html封装成一个类,用集合的contains方法判断重复
    组合的算法,更简单,模拟二进制的方法从000000到111111循环,如果二进制中有2个1,就是所求的组合,把是1位置的两个元素取出来组合就可以了,
    比如{"084","02","10","20","26","28","29"},对于二进制000101这样的情况,取最后一个和倒数第三个的位置元素就是 26和29组合
    另外,最后不是采用随机来生成数据的,因为随机是没法判断出现次数最少的,必须穷举所有组合才能知道什么组合才是出现重复最少(我当时是这么做的)
    该提示的都提示你了,LZ不是想伸手就要代码吧,先自己动手写写,有问题再问。
      

  2.   


    public static void main(String[] args) {
    String[][] arr = new String[][] {
    {"084","02","10","20","26","28","29"},
    {"083","04","09","14","15","26","33"},
    {"082","02","04","11","18","22","29"},
    {"081","02","05","10","24","25","29"},
    {"080","04","09","14","15","16","27"},
    {"079","06","07","12","24","30","33"},
    {"078","08","15","22","24","28","33"},
    {"077","02","04","13","18","26","28"},
    {"076","11","18","22","27","29","30"},
    {"075","04","06","22","23","29","32"}
    };

    List<List<String>> list = new ArrayList<List<String>>();
    for(int i = 0; i < arr.length; i++) {
    for(int j = 1; j < arr[i].length; j++) {
    for(int k = j + 1; k < arr[i].length; k++) {
    List<String> temp = new ArrayList<String>();
    temp.add(arr[i][j]);
    temp.add(arr[i][k]);
    if(!list.contains(temp)) {
    list.add(temp);
    }
    }
    }
    }
    //System.out.println(list.size());
    Random random = new Random();
    String[] mab = new String[33];
    String[] selected = null;
    while(true) {
    for(int i = 0; i < 33; i++) {
    mab[i] = (i + 1 < 10 ? "0" : "") + String.valueOf(i + 1);
    }
    selected = new String[6];
    for(int i = 0; i < 6; i++) {
    int index = random.nextInt(33 - i);
    selected[i] = mab[index];
    mab[index] = mab[32 - i];
    //mab[33 - i] = selected[i];
    }
    boolean flag = false;
    for(int j = 1; j < 6; j++) {
    for(int k = j + 1; k < 6; k++) {
    List<String> temp = new ArrayList<String>();
    temp.add(selected[j]);
    temp.add(selected[k]);
    if(list.contains(temp)) {
    flag = true;
    }
    }
    }
    if(flag) {
    continue;
    } else {
    break;
    }
    }
    for(int i = 0; i < 6; i++) {
    for(int j = 0; j < 6; j++) {
    if(selected[i].compareTo(selected[j]) < 0) {
    String temp = selected[i];
    selected[i] = selected[j];
    selected[j] = temp;
    }
    }
    }
    for(String str : selected) {
    System.out.print(str + "\t");
    }
    System.out.println();
    }
      

  3.   

    这样的随机一点意义都没有,如果是这样,还不如从33个数字中找出没有出现过的数字来组合,比如
    1,3,17,19,21,31
    这6个数字在最近10期没出现过,它们两两组合最符合LZ的要求了,所以不是这么简单的,所以我说了,不能用随机,因为随机就相当于没有意义,每台机器随机的结果不一样,谁能保证谁中将概率更高?看看LZ或大家还有什么好的想法