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

一、問題描述:

對於這樣一個序列: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%通過測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章