题目大意说:有10个房间,每个房间内各有一个大小不同的宝石,如果前4个房间只看不拿,在后面的6个房间,发现一个比前面4个房间内的宝石都大的宝石就拿,否则拿最后一个,问拿到最大的宝石的概率?
设最大宝石在第i个位置(i=1...10),应该是等概率的1/10
1.设 i = 5, p =1
2.i=6...10,需要考虑前i-1个位置上的宝石大小,假设前i-1个宝石中最大的(max(i-1))不在前四位中,则因为这个宝石(max(i-1))在最大的宝石(max(10))前面,且(max(i-1))大于前四个中的任一个,所以取不到最大(max(10)),相反max(i-1)在前四个位置则可以取到最大宝石(max(10)), 而最大宝石在前四的概率为(4/i-1)
所以,概率为1/10*(1+4/5+4/6+4/7+4/8+4/9)
代码验证为:
View Code
1 import java.util.*; 2 class Test { 3 //对大小量化的数列 4 private int a[] = {1,2,3,4,5,6,7,8,9,10}; 5 public int cnt = 0; 6 //产生所有的排列 7 public void seq(int i) { 8 if(i==9) cnt += process(); 9 for(int j=i;j<10;j++) { 10 swap(i,j); 11 seq(i+1); 12 swap(i,j); 13 } 14 } 15 private void swap(int i, int j) { 16 int temp = a[i]; 17 a[i] = a[j]; 18 a[j] = temp; 19 } 20 private int process() { 21 int max4 = 0; 22 for(int i =0;i<4;i++)max4 = max4 > a[i] ? max4 : a[i]; 23 for(int i=4;i<10;i++)if(a[i]>max4){ 24 //拿到最大 25 if(a[i]==10)return 1; 26 else return 0; 27 } 28 //最大在前四个位置 29 return 0; 30 } 31 32 public static void main(String args[]) { 33 Test test = new Test(); 34 test.seq(0); 35 System.out.println(test.cnt); 36 } 37 }
概率为 cnt/(10!) cnt = 1445184