51nod 1087 1 10 100 1000
1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000) 第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)
Output
共T行,如果该位是0,输出0,如果该位是1,输出1。
Input示例
3 1 2 3
Output示例
1 1 0
李陶冶 (题目提供者)
规律明显
1.打表存储
2.二分查找
3.输出结果
#include <iostream>
using namespace std;
int a[50010] = {0};
bool dbfind(int x[], int lst, int key)
{
int mid, fst = 1;
while(fst <= lst)
{
mid = (fst + lst) / 2;
if(a[mid] > key)
lst = mid - 1;
else if(a[mid] < key)
fst = mid + 1;
else
return true;
}
return false;
}
int main()
{
int flag = 1, step = 1, len ;
for(len = 1; ; len++)
{
a[len] = step;
step += flag ++;
if(a[len] > 999999999)
break;
}
/*for(int i = 1; i < 100; i++)
cout<<a[i]<<endl;*/
int n, tmp;
cin>>n;
while(n--)
{
cin>>tmp;
if(dbfind(a,len,tmp))
cout<<1<<endl;
else
cout<<0<<endl;
}
return 0;
}