【HPUOJ】积分赛(一)E:Number of numbers

    xiaoxiao2021-03-25  91

    问题 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

    最新回复(0)