51Nod-1087 1 10 100 1000【模擬】
阿新 • • 發佈:2019-01-06
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 3Output示例
1 1 0
問題分析:
可以用模擬來解決。
還可以考慮用數學的方法來解,三角形數是1、3、6、10、15、21、28、36、45、55、66、78、91、105、120、136、153、171……(OEIS中的數列A000217)。
程式說明:程式是用模擬法實現的,n不大,計算速度應該是比較快的。逐步地減去1,2,3,4,......,直到不能再減(再減的化,結果變成負數),如果剩餘值為1則結果為1,否則結果為0。
參考連結:(略)
AC的C++程式如下:
#include <iostream> #include <stdio.h> using namespace std; int main() { int t, n; scanf("%d", &t); while(t--) { scanf("%d", &n); int ak=1; while(n>ak) n -= ak++; printf("%d\n", (n == 1) ? 1 : 0); } return 0; }