一般筆試面試中常會(huì)有概率問題的出現(xiàn)(算法較多),他們有這樣的規(guī)律:

概率的應(yīng)用有兩塊:

現(xiàn)在我們來看案例:
案例1



所以兩強(qiáng)不相遇的概率為
那么兩強(qiáng)相遇的概率為
案例2


案例3


案例4


關(guān)于步驟5的解釋是,如果產(chǎn)生了21,22,23,24,那么重新進(jìn)行步驟4,直到結(jié)果在0到20之間,這樣產(chǎn)生21到24的概率會(huì)平均分配到0~20之間。但是我的疑問是,如果用其他方法,不也可以這么產(chǎn)生嗎?
案例5


案例6


如果調(diào)用f()兩次,返回的結(jié)果仍然是[0, X)區(qū)間上的話,那么兩次調(diào)用f()的返回值都必須落在[0, X)區(qū)間上,否則就會(huì)返回大于X的數(shù)了。所有,k次同理
案例7

首先,先插一條程序
//這個(gè)程序確實(shí)證明了Math.random()是從[0,1)隨機(jī)的,但是這里不能用,因?yàn)榭赡?//打印M個(gè)數(shù)的時(shí)候,有可能重復(fù)打印。
public static void main(String[] args){
int[] array = new int[]{1, 2, 3, 4, 5};
ArrayList<Integer> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
ArrayList<Integer> list3 = new ArrayList<>();
ArrayList<Integer> list4 = new ArrayList<>();
ArrayList<Integer> list5 = new ArrayList<>();
for(int i = 0; i < 100000; i++){
int num = array[(int)(Math.random() * array.length)];
if(num == 1){
list1.add(num);
}else if(num == 2){
list2.add(num);
}else if(num == 3){
list3.add(num);
}else if(num == 4){
list4.add(num);
}else if(num == 5){
list5.add(num);
}
}
System.out.println(list1.size());
System.out.println(list2.size());
System.out.println(list3.size());
System.out.println(list4.size());
System.out.println(list5.size());
}


把每次打印的數(shù)都交換到最后,是防止重復(fù)打印
案例8




