http://acm.hdu.edu.cn/showproblem.php?pid=3750
水题:二分查找,求查找的次数的数学期望,1-N区间的每个数出现的概率相等
#include <iostream>
#include <cstdio>
using namespace std;
void dfs(int &sum,int l,int r,int cnt)
{
if(l>r) return;
sum+=cnt;
if(l==r) return;
int m=(l+r)>>1;
dfs(sum,l,m-1,cnt+1);
dfs(sum,m+1,r,cnt+1);
}
int main()
{
int n,ans;
while(scanf("%d",&n)==1)
{
ans=0;
dfs(ans,1,n,1);
printf("%.2lf\n",ans*1.0/n);
}
return 0;
}