每日一題 求連續序列第n個數字

2021-09-29 08:51:59 字數 1561 閱讀 6980

要求:

最簡單的方法,乙個數乙個數的數。

int

getnnum

(int n)

tmp = sum;

sum +

= index;

if(sum >= n)

break;}

// 獲取輸出在目標數字中的第幾位

int n_num = n - tmp;

char buf[

256]=;

sprintf

(buf,

"%d"

, i)

;return

(buf[n_num -1]

-'0');

}

本問題的關鍵在於尋找序列中的目標數字,有了大體思路就可以對**進行優化,發現中間過程乙個數乙個數的去找目標數字的工作是沒有必要的,可以定位目標數字所在區間在進行,用目標數字在區間內的相對位置與區間底數的和獲取目標數字。前一版本雖然效率低下且問題巨大,但可以作為後續版本測試的模版,往往越笨的方法得出的結果越正確,只是效率有待提公升。

int

findnthdigit

(int n)

//獲取到目標數字

int k =

(n - tmp)

/j;if((

long

long

)(n - tmp)%(

long

long

)j !=0)

k++;/*while(1)

*/// 獲取輸出在目標數字的相對位置

int n_num = j -

((tmp + j*k)

- n)

;char buf[

256]=;

// 將數字轉字串,以陣列的形式獲取輸出

sprintf

(buf,

"%d"

, i+k-1)

;printf

("%d\n"

, buf[n_num -1]

-'0');

return

(buf[n_num -1]

-'0');

}

int

findnthdigit

(int n)

// pow(10,i-1)區間基數,(n-1)/i區間相對位置

int am_num=

(n-1

)/i+

pow(

10,i-1)

; string a=

to_string

(am_num);if

(n%i==0)

return

(a[i-1]

-'0');

return

(a[n%i-1]

-'0');

}

每日一題 求1 2 n(中等)

劍指 offer 64.求1 2 n 求 1 2 n 要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 示例 1 輸入 n 3 輸出 6 示例 2 輸入 n 9 輸出 45 class solution 邏輯運算子的短路效應 常見的邏輯...

每日一題 求眾數

給定乙個大小為n的陣列,找出其中的眾數。眾數是指在陣列 現次數大於 n 2 取下界的元素。示例1 輸入 3,2,3 輸出 3 示例2 輸入 2,2,1,1,1,2,2 輸出 2 include 摩爾投票演算法思想 1 選取序列中第乙個元素為當前序列出現次數較多的元素 2 選取乙個變數來 計分 初始為...

每日一題 序列計數

問題描述 小明想知道,滿足以下條件的正整數序列的數量 第一項為 n 第二項不超過 n 從第三項開始,每一項小於前兩項的差的絕對值。請計算,對於給定的 n,有多少種滿足條件的序列。輸入格式 輸入一行包含乙個整數 n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以10000的餘數。樣例輸...