您的位置:首页 > 其它

【51Nod】1087 1 10 100 1000

2017-05-18 11:05 351 查看

题意

1,10,100,1000…组成序列1101001000…,求这个序列的第N位是0还是1。

解题思路

对于1的位置,我们可以得到序列

1,2,4,7,11,16,…

观察发现

1=1

2=1+1

4=1+1+2

7=1+1+2+3

11=1+1+2+3+4



我们可以得到推导公式a
=1+n*(n-1)/2;

所以,当输入的N是a[]序列的值时,输出为1,否则为0

逆向求解N=1+n*(n-1)/2,如果求解n为整数,则证明N是a[]序列的值

令k=sqrt(2*N-2),那么k满足n-1<=k<=n,只需要验证(k-1)*k==2*N-2或者k*(k+1)==2*N-2是否满足。

参考代码

#include <iostream>
#include <math.h>
using namespace std;
int main(){
int t,n;
cin>>t;
while (t--){
cin>>n;
int k=sqrt(2*n-2);
if ((k-1)*k==2*n-2||k*(k+1)==2*n-2)
cout<<1<<endl;
else
cout<<0<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: