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