题意:用二分法找出数学期望。
策略,二分。
求数学期望有两种方法,一:求出每一个数的概率,再与数相乘,最后把所有的乘积相加就好了。
二:数学期望总是与平均数相等,所以可以当做求平均数。(简单方便)
代码:
#include <stdio.h>
#include <string.h>
int sum;
void bi_sear(int n){
sum = 0;
int temp, i, left, right, mid;
for(i = 1; i <= n; i ++){
temp = 0;
left = 1; right = n;
while(1){
++temp;
mid = (left+right)/2;
if(mid == i){
sum+=temp;
break;
}
else if(mid < i) left = mid+1;
else right = mid-1;
}
}
}
int main(){
int n;
while(scanf("%d", &n) == 1){
bi_sear(n);
printf("%.2lf\n", (sum*1.0)/n);
}
return 0;
} 原文:http://blog.csdn.net/shengweisong/article/details/38820175