演算法分析 書的頁碼問題

2021-06-26 00:06:01 字數 997 閱讀 6069

問題描述:

給定乙個十進位制整數n,表示書的總頁碼數,計算書的頁碼中分別用到多少次數字0,1,2, ....,9。

如輸入11                得到 :            1,4,1,1,1,1,1,1,1,1

解法1:時間複雜度為  o(n* log n)

void handler(int *a, int i)

}int main(void)

{int a[11];

int n;

int i=0;

for(i=0;i<10;i++)

a[i]=0;

cin>>n;

for(i=1;i<=n;i++)

handler(a,i);

for(int k=0;k<10;k++)

cout<

解法2:時間複雜度為  o( log n)

分析如下:

由0到9組成的n位數,從n個0到n個9,在這10^n個n位數中,0,1,2,......,9 每個數字都使用相同次數,設為f(n)。

f(n)滿足:

10f(n-1) + 10^(n-1)         n>1

f(n) =

1                                       n=1

所以,f(n)=n*10^(n-1)

舉例:假如書頁碼數為21345。則包含了2個 0000~9999區間,即 0000~9999和 10000~19999。每個數字出現次數為2*f(4)。而多餘的前導0出現在區間 0000~9999中。0000~0999中,有1000個。000~099中,有100個。00~09中,有10個。加上第乙個0。

最高位數字為1,出現了10000次。因為10000~19999。接著計算20000~21345,2出現了1346次。於是,著眼點就落在0000~1345中各數字的出現次數上,此時依照上面的取區間法,一次一次去掉最高位,直到剩下個位時為止。

SDNU 1014 書的頁碼問題

time limit 1000 ms memory limit 32768 kb total submission s 1109 accepted submission s 256 description 對於一本共有n頁的書,它的頁碼從1開始編號,一直到n,頁碼中沒有無用的0,則該書頁碼中分別共用...

演算法分析問題

演算法分析主要包括時間複雜度和空間複雜度。時間複雜度 可以有事前分析和事後測試兩種。事前分析通過計算程式步數來表示 事後測試需要在程式中加入計算時間的函式來統計。在這裡我採用的是clock 函式 該函式在標頭檔案 time.h 或者ctime下 分析結果如下 include includeusing...

sdnu1024 糾結的頁碼問題

1024.糾結的頁碼問題 time limit 1000 ms memory limit 32768 kb total submission s 230 accepted submission s 138 description 要期末考試了,陶陶在看書複習,看著看著就走神了,他注意到書的每頁都乙個...