序列1,2,2,3,3,3, ... 求第n项的值(n=N*)

来源:互联网 发布:mysql下create index 编辑:程序博客网 时间:2024/05/19 01:31

一、问题描述:

对于这样一个序列:1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,…
分别有1个1,2个2,3个3,4个4,……

求第n个数的值。

二、要求

输入: n,范围: n大于等于1,且n小于等于10^18。

输出: 序列中第n个数的值

要求: 运行时间不超过1s(内存不超过多少我忘了)

输入范例: 100

输出范例: 14

三、解决

编程语言: java

思路:

对序列 1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,…
令number=1,2,3,…
令order(no) 为最后一个number=no的数的位置序号,

那么,
order(1) = 1,
order(2) = order(1)+2,
order(3) = order(2)+3,
order(4) = order(3)+4

当我们求第n个数的值时,只需找到符合 order(m-1)小于n、n小于order(m)的m值即可。

下面是程序:

package test;import java.util.Scanner;public class Main {  public static void main(String[] args) {      Scanner in = new Scanner(System.in);      while(in.hasNext()){      long n = in.nextLong();//接收输入的n      long order= 1;//每组number的最后一个序号值      long number = 0;//对应的值:1,2,3,4,...      //例如1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,... 中      // “number=4的order”(即最后一个4所在的位置)为10      long i=2;      boolean result=true;      if (n==1) System.out.println(1);      else        {                 while(order+i<n){              order=order+i;              i++;          }          number=i;          System.out.println(number);        }      }    }}

在9。8号的笔试中,其实这部分

while(order+i<n){    order=order+i;    i++;}

我是用了一个布尔类型的变量判断while循环终止条件,
在循环里又用了 if 语句判断n是否符合 order(m-1)小于n、n小于order(m)
提交后调试结果是 90% 通过。
所以,不知道本文的代码是否可以100%通过测试。

原创粉丝点击