就是给出上限,进行猜数游戏,然后求出找到所以求的数的概率不过题目要求是用二分查找的方法……其实就是求出1到n每个数得到的概率相加再除以n就得了,不过用二分有个小技巧,设所猜的数为j,则二分的下个数为:j=j>>1;二分就是二进制往右移嘛,那时怎么就做不出来捏,唉……现在想想,也太容易了!!!
#include <iostream>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
int main()
{
//freopen("liwei.txt","r",stdin);
int n,i,j,sum;
while(cin>>n)
{
sum=0;
for(i=1;i<=n;i++)
{
j=i;
while(j)
{
sum++;
j=j>>1; //二分查找的下一个数,就是往右移位
}
}
printf("%.2f\n",(sum*1.0)/(n*1.0));
}
return 0;
}