不难发现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; }