51Nod 1087 1 10 100 1000
2016-11-21 20:24
246 查看
1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1。
Input
Output
Input示例
Output示例
分析:为“1”的位依次为1,2,4,7,11,16……,记为m
m = 1+(n*(n-1))/2 (n=1,2,3,4……)
#include <stdio.h>
#include <math.h>
int main()
{
int t;
scanf("%d",&t);
int n;
for (int i = 0; i < t; i++)
{
scanf("%d",&n);
if (n == 1)
printf("1\n");
else
{
int k = 2*(n-1);
for (int j = sqrt(2*n); j < 100000; j++)
{
if(j*(j-1) == k)
{
printf("1\n");
break;
}
else if(j*(j-1) > k)
{
printf("0\n");
break;
}
}
}
}
}
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……,记为m
m = 1+(n*(n-1))/2 (n=1,2,3,4……)
#include <stdio.h>
#include <math.h>
int main()
{
int t;
scanf("%d",&t);
int n;
for (int i = 0; i < t; i++)
{
scanf("%d",&n);
if (n == 1)
printf("1\n");
else
{
int k = 2*(n-1);
for (int j = sqrt(2*n); j < 100000; j++)
{
if(j*(j-1) == k)
{
printf("1\n");
break;
}
else if(j*(j-1) > k)
{
printf("0\n");
break;
}
}
}
}
}
相关文章推荐
- 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》