(51nod)1087 - 1 10 100 1000

    xiaoxiao2021-03-25  77

    1087 1 10 100 1000 题目来源:  Ural 1209 基准时间限制:1 秒 空间限制:131072 KB 分值: 5  难度:1级算法题  收藏  关注 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的位置分别在:        1 2 4 7 11 16

    减去1以后他们的位置分别是:0 1 3 6 10 15

    可以发现后面是一个等差数列求和后的结果。

    对第一个位置特判,其它位置的数据进行解方程 x^2+x-2(n-1)=0

    如果解出来的较大值是一个整数,那么第n位就是1了。

    #include <cstdio> #include <cmath> using namespace std; int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); if(n==1) {printf("1\n"); continue;} double ans=(sqrt(8*(n-1)+1)-1)/2; printf("%d\n",ans==(int)ans?1:0); } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-36398.html

    最新回复(0)