10 100 1000 (二分查找)***

                                            3286: 1 10 100 1000

                                                              时间限制: 1 Sec  内存限制: 128 MB
                                                                         提交: 126  解决: 39
                                                            [提交][状态][讨论版][命题人:acm4302]

题目描述

1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1(自左向右)。

输入

第一行一个整数T,表示数组组数
后面T行,每行一个整数N  (N<=10^9)

输出

共T行,如果该位是0,输出0;如果该位是1,输出1

样例输入

3
1
2
3

样例输出

1
1
0

此题没有告诉你要查找哪个数,而是用二分法渐渐缩小范围去试着找出符合条件的那个数。


#include <iostream>

using namespace std;
typedef long long ll;
ll Binary_search(int m)  //二分
{
    ll first=1;
    ll last=m;
    while (first<=last)
    {
        ll mid=(first+last)/2;
        ll k=mid*(mid+1)/2;
        if(k==m)
        {
            return 1;
        }
        else if(k<m)
        {
            first=mid+1;
        }
        else if(k>m)
        {
            last=mid-1;
        }
    }
    return 0;
}

int main()
{
    int T;

    cin >>T;
    while (T--)
    {
        int n;
        cin >>n;
        if(n==1)
        {
            cout <<"1"<<endl;
            continue;
        }
        if(Binary_search(n-1))
        {
            cout <<"1"<<endl;
        }
        else
            cout << 0<< endl;

    }


    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41199502/article/details/82467240