1286: Number of numbers [思维]
时间限制: 1 Sec 内存限制: 128 MB题目描述
有这样一个序列(1) (1 2 1) (1 2 3 2 1) (1 2 3 4 3 2 1) (1 2 3 ... n n-1 ... 3 2 1)。
问你第N个数是什么?
(括号是为了方便大家观看,请忽略掉括号)
输入
有多组测试数据,请处理到文件结束。
每组数据给定一个整数N(1 <= N <= 10^9),表示要查找的数。
输出
每组数据输出一个整数,表示序列中的第N个数。
样例输入
1
2
3
样例输出
1
1
2
思路:第一个括号里有1个数,第二个有3个,第三个有5个,第n个有n+n-1个;
推导出,前一项和有1,前2项和有4个,前3项和有9,即为n*n;
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int k,p;
for(int i=1;i<=100000;i++)
{
if(i*i>=n)
{
k=i;
break;
}
}
if(k*k==n)
{
printf("1\n");
continue;
}
p=n-(k-1)*(k-1);
if(p<=k)
{
printf("%d\n",p);
}
else
{
printf("%d\n",k+k-p);
}
}
return 0;
}