题目:有一个国家(我发誓不是中国 - 译者),人人希望生男孩,每个家庭都会不断地要孩子,如果是女孩,会继续要,直到生下男孩为止,最终这个国际的男女比例将是多少?
/****题目:有一个国家(我发誓不是中国-译者),人人希望生男孩,每个家庭都会不断地要孩子,如果是女孩,会继续要,直到生下男孩为止,最终这个国际的男女比例将是多少?**生男女,假设生到第n个是男孩。*男:女=n/(1+...n-1)*取概率*加权平均*n=1加权值0.5*n=2加权值0.25....*然后算出合理的n值*就可以得出男女比例*男:女=n/(1+...n-1)=n/((1+n-1)*(n-1)/2)=2/n-1#n!=1,{n=1|1}*@parammax*生n(n=max)个,包含了生n-1,n-2...1的可能性。*/publicstaticvoidcalcRate(intmax){List<Integer>girlList=newArrayList<Integer>();//生女概率 List<Double>girlRate=newArrayList<Double>();for(intn=1;n<=max;n++){if(n==1){girlList.add(0);}else{//1+2+...+(n-1) inttotal=0;for(inti=1;i<n;i++){total+=i;}girlList.add(total);}doublecurrentGirlRate=Math.pow(0.5f,n);girlRate.add(currentGirlRate);}doublerate=0;for(inti=0;i<max;i++){//附上加权值 if(i==0){rate+=1*(1-girlRate.get(i));}else{rate+=(1d/girlList.get(i))*(1-girlRate.get(i));}}NumberFormatnf=NumberFormat.getNumberInstance();System.out.println("生"+max+"个,男:女="+nf.format(rate));}
运行结果:
生n个,包含了生n-1,n-2...1的可能性。
//生2个,男:女=1.25
//生3个,男:女=1.542
//生4个,男:女=1.698
//生5个,男:女=1.795
//生6个,男:女=1.86
//生7个,男:女=1.908
//生8个,男:女=1.943
//生9个,男:女=1.971
//生10个,男:女=1.993
//生100个,男:女=2.173
//生1000个,男:女=2.191
//生10000个,男:女=2.193
//生100000个,男:女=2.193