要求:
最簡單的方法,乙個數乙個數的數。
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的餘數。樣例輸...