hdu 3750 Guess Game

简介: 点击打开链接 题目意思:  给定一个数n,假设有一个m ( 1

点击打开链接


题目意思:  给定一个数n,假设有一个m ( 1<= m <= n),现在要求用二分查找的方法,问找到这个m的期望值是多少,期望值 = 总次数 / m的个数

解题思路:  直接枚举每一个可能的值,然后去二分查找,每次都把次数加起来,最后把总次数除以答案可能的个数即可

代码: 

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
using namespace std;

int n , sum , num;
int Left , Right , Mid;

//二分查找
void solve(){
    sum = 0 ; 
    for(int i = 1 ; i <= n ; i++){
        Left = 1 ; Right = n ;//每次必须从新赋值
        num = 0;
        while(1){
            num++;//次数加一
            Mid = (Left + Right)/2;//求出平均值
            if(Mid == i){
                sum += num ; break;//找到以后总次数加上num
            }
            if(Mid < i) Left = Mid+1; //如果平均值小于i,从新定义left 和right
            if(Mid > i) Right = Mid-1;//如果平均值大于i,从新定义left 和right
        }
    }
}

//主函数
int main(){
    //freopen("input.txt" , "r" , stdin);
    while(scanf("%d" , &n) != EOF){
        if(n == 1) printf("1.00\n");//n为1 比较特殊
        else{
            solve(); 
            printf("%.2lf\n" , (sum*1.0)/n); 
        }
    }
    return 0;
}


目录
相关文章
|
算法
uva 10891 game of sum
题目链接 详细请参考刘汝佳《算法竞赛入门经典训练指南》 p67
31 0
|
算法 索引
LeetCode 55. Jump Game
给定一个非负整数数组,您最初定位在数组的第一个索引处。 数组中的每个元素表示该位置的最大跳转长度。 确定您是否能够到达最后一个索引。
90 0
LeetCode 55. Jump Game
|
算法 索引
LeetCode 45. Jump Game II
给定一个非负整数数组,初始位置在索引为0的位置,数组中的每个元素表示该位置的能够跳转的最大部署。目标是以最小跳跃次数到达最后一个位置(索引)。
80 0
LeetCode 45. Jump Game II
|
人工智能 算法 大数据
LeetCode - 45. Jump Game II
45. Jump Game II  Problem's Link  ---------------------------------------------------------------------------- Mean:  给定一个数组a,玩家的初始位置在idx=0,玩家需要到达的位置是idx=a.
938 0