问题 E: 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
思路:题意为找出第n个数是几。看题目中,一个括号可以看做一个整体,第n个括号里共有(2n-1)个数,根据等差数列求和,求出前n个
括号,即前n个数列共有多少个数字,求和公式,s=(1+2n-1)*n/2=n*n;所以本题中令N=n*n;开根号可以求出在第几个括号,括号里的第几
个。开方若为整数,说明是括号最后一位,不是整数,重点考虑。
#include<cstdio>
#include<cmath>
int main()
{
double n,m;
int d;
while(~scanf("%lf",&n))
{
m=sqrt(n);
int x=m;
int y=m+1;
if(x==m)//即n开平方后是整数,说明第n个数在第m个括号最后一个是1;
printf("1\n");
else//不是整数,说明在第m+1个括号内,
{
d=n-x*x;//代表在第m+1个括号里的第几个
if(d<=y)//说明就是d,因为从1开始递增
printf("%d\n",d);
else//对称递减了
{
d=2*y-d;
printf("%d\n",d);
}
}
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-16860.html