1. 程式人生 > >51Nod-1087 1 10 100 1000【模擬】

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