彩票数字随机算法:
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、 从开奖历史数据中取出最近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中出现的次数最低。这个算法怎么写?
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不是想伸手就要代码吧,先自己动手写写,有问题再问。
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();
}
1,3,17,19,21,31
这6个数字在最近10期没出现过,它们两两组合最符合LZ的要求了,所以不是这么简单的,所以我说了,不能用随机,因为随机就相当于没有意义,每台机器随机的结果不一样,谁能保证谁中将概率更高?看看LZ或大家还有什么好的想法