有fa()函数等概率返回[4,10]整数值,如何获取到[10,19]返回等概率的整数
public static int fa(){
return (int)(Math.random() * 7 + 4);
}
- 对fa()返回的值进行加的操作(+6),不能够实现目的。
- 是否可以通过二进制数来实现?
- 需要有一个函数对(0,1)等概率返回--->二进制每个位都是0或1概率各是50%
- 获取到[0,9]等概率返回,只需要对出参值+10即可以实现结果
public class MathTest {
//[4,10]等概率返回
public static int fa(){
return (int)(Math.random() * 7 + 4);
}
//0,1等概率返回
public static int f(){
int result;
do {
result = fa();
}while (result == 7);
return result < 7 ? 0 : 1;
}
//[10,19]等概率返回
public static int fb(){
int num ;
do {
num = (f() << 3)+ (f() << 2) + (f() << 1) + f();
}while (num > 9);
return num;
}
public static void main(String[] arg){
int times = 12345;
int[] ints = new int[10];
for (int i = 0; i < times; i++) {
int index = fb();
ints[index]++;
}
for (int i = 0; i < ints.length; i++) {
System.out.println("数字" + (i + 10) + "出现了 " + ints[i] + " 次");
}
}
}
算法相关题后续持续更新!