跟同学买彩票看完开奖后的摸鱼。 大乐透的格式为前区5个整数,取值范围1-35,后区2个整数,取值范围1-12,且同区间内不能重复。 其实要解决的也就是不重复的问题。 一开始的思路是用哈希,或者和取值范围等长的数组,取出后标记该位是否被取过。但问题就是要一直随机直到找到没有取过的数字。 所以最后用了链表,取出来了删掉即可。
public class bighappytou {
public static int[] get(){
int[] re = new int[7];
List<Integer> block1 = new LinkedList<>();
List<Integer> block2 = new LinkedList<>();
for(int i = 1;i <= 35;i++){
block1.add(i);
if(i <= 12) block2.add(i);
}
for(int i = 0;i < 5;i++){
int index = (int) (Math.random()*(block1.size()-0)+0);
re[i] = block1.get(index);
block1.remove(index);
}
for(int i = 0;i < 2;i++){
int index = (int) (Math.random()*(block2.size()-0)+0);
re[i + 5] = block2.get(index);
block2.remove(index);
}
Arrays.sort(re,0,5);
Arrays.sort(re,5,7);
return re;
}
public static void main(String[] args) {
int num = 5;
while (num-- != 0){
System.out.println(Arrays.toString(get()));
}
}
}
还顺便复习了一下sort的用法,其中两个索引是包含前一个不包含后一个的,所以toIndex要多写一位。
|