导读
这里随机数问题介绍3个题目,可以算是一大类的吧。
话不多说,直接看题:
第一题:基础题目
- 思路:
用随机数1——5, 来产生随机数1——7。
就要想办法通过已有的条件1——5,来凑!
首先要有个0出来,方便后面计算。rand1To5() - 1 : 可产生:0,1,2,3,4
这些范围比7小,还要连续的数字都要有,(4后面是5,所以乘以5)
那么rand1To5() * 5 可产生:0,5,10,15,20
这两个凑出来的 相加,可产生:0,1,2,3,4,5,6,。。。,20,21,22,23,24。
这些范围已经大于7了,那么就将大于7的那部分,在重新随机下,保证产生在0——6之间的数即可,在加上个1,就是产生1——7。
- 代码:
public static int rand1To5() {
return (int)(Math.random()*5) + 1;
}
// 解法
public static int rand1To7() {
int num;
do {
num = (rand1To5() - 1) + ((rand1To5() - 1) * 5);
}while(num >= 7);
return num + 1;
}
- 检验正确性
public static void main(String[] args) {
// 检验基础题目
int[] map = new int[8]; // 哈希表。 下标是对于产生的数字,相应的值是产生的次数。
int times = 1000; //随机生成的次数
int sum = 0;
for(int i = 0; i < times; i++) {
int num = rand1To7();
map[num]++;
}
for(int i = 0; i < 8; i++) {
System.out.println("出现数字" + i + "的次数 : " + map[i]);<