Tyvj-TOM的无穷序列

背景

蛟川书院模拟试题

描述

TOM有一个无穷序列中如下:
110100100010000100000。。。。。
请你帮助TOM找出在这个无穷序列中指定位置上的数字

输入格式

第一行一个正整数N,表示询问的次数;
接下来的N行一个正整数Ai,Ai表示在序列中的位置。

输出格式

N行,每一行为0或1,表示序列第Ai位上的数字。

测试样例1

输入



14 

6

输出




0

备注

对于100%的数据有N<=1500000,Ai<=10^9
提示:差值为1的等差数列   Sn(前n项和)=n(n+1)/2
Moe-ing
 
思路:这题数据有点大,不考虑用模拟出整个序列再求,可以找出这个序列的规律,在对其进行计算。
过程:可以先对于2*(a-1+0.25)进行开方,并取整,再用a-sum*(sum-1)/2;,这样就可以知道那一位是不是1或者0。
代码如下:
 1 #include<stdio.h>
 2 #include<math.h> 
 3 int main()
 4 {
 5     int a,sum,n;
 6     scanf("%d",&n);
 7     while(n--)
 8     {
 9         scanf("%d",&a);
10         sum=0.5+sqrt(0.25+2*(a-1));//对于2*(a-1+0.25)进行开方,并取整 
11         a=a-sum*(sum-1)/2;
12         if(a==1)printf("%d\n",1);//是1 
13         else printf("%d\n",0);//否则是0 
14     }
15     return 0;
16 }

 

 
posted @ 2015-02-24 15:58  Memoryヾノ战心  阅读(385)  评论(0编辑  收藏  举报