【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; }
相关文章推荐
- 51nod 1087 1 10 100 1000
- 51NOD 1087 1 10 100 1000
- 51Nod-1087 1 10 100 1000【模拟】
- [51NOD]-1087 1 10 100 1000 [思维]
- 51nod 1087 1 10 100 1000
- 51NOD 1087 1 10 100 1000
- 51nod-【1087 1 10 100 1000】
- 51nod 1087 1 10 100 1000
- 51nod 1087 1 10 100 1000
- [51nod] 1087 1 10 100 1000
- 51nod 1087 1 10 100 1000
- 51Nod-1087 1 10 100 1000
- 51nod 1087 1 10 100 1000【二分】
- 51nod-1087 . 1 10 100 1000
- 51Nod 1087 1 10 100 1000
- 51Nod 1087 1 10 100 1000
- 51nod 1087 1 10 100 1000
- 51nod 1087 1 10 100 1000【递推】
- 51nod 1087 1 10 100 1000
- 【51Nod】1087 - 1 10 100 1000 问题(水)