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;
}