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