統計數字問題

2021-09-06 22:16:02 字數 1198 閱讀 3371

在王曉東編著的《演算法設計與實驗題解》中看到的這個問題,問題描述如下:

一本書的頁碼從自然數1開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字0。例如第6頁用6表示而不是06或006。數字統計問題要求對給定書的總頁碼,計算出書的全部頁碼中分別用到多少次數字0,1,2,3,.....9。

這個題目有個最容易想到的n*log10(n)的演算法。這是自己寫的複雜度為o(n*log10(n))的**:

int

n;int c[10];//

計數void

calc()

while(j!=0

); }

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

cout

}int

main()

return0;

}

寫了個指令碼來處理測試資料:

t=`find  test -type f`

mkdir

answer1

for i in $t; do

echo

$i pos=$-4

echo $

k=$./count < $i > answer1/count$.out

done

formdos answer/* 轉換編碼

diff -ru answer answer1

更優演算法;

考察由0,1,2...9組成的所有n位數。從n個0到n個9共有10^n個n位數。在這10^n個n位數中,0,1,2.....9每個數字使用次數相同,設為f(n)。f(n)滿足如下遞推式:

n=1情況: f(n) =1

n>1情況: f(n) = 10f(n-1)+10^(n-1)

最前面可新增0-9 這十個數字,所以後面所有數字出現次數為 10f(n-1)  ,加上最前面這個數字自己出現的次數10^(n-1)

f(2)=10*1+10^1=20

據此,可從高位向低位進行統計,再減去多餘的0的個數即可。

10(10f(n-2)+10^(n-2))+10^(n-1) = 10^2*f(n-2)+2*10^(n-1) = 10^(n-1)*f(1) +(n-1)*10^(n-1) =n*10^(n-1)

bash 固定位置擷取

$:擷取變數varible從位置start開始長度為len的子串。第乙個字元的位置為0。

統計數字問題

在王曉東編著的 演算法設計與實驗題解 中看到的這個問題,問題描述如下 一本書的頁碼從自然數1開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字0。例如第6頁用6表示而不是06或006。數字統計問題要求對給定書的總頁碼,計算出書的全部頁碼中分別用到多少次數字0,1,2,...

統計數字問題

問題描述如下 一本書的頁碼從自然數1開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字0。例如第6頁用6表示而不是06或006。數字統計問題要求對給定書的總頁碼,計算出書的全部頁碼中分別用到多少次數字0,1,2,3,9。演算法設計與分析習題 分析 考察由0,1,2.9...

統計數字問題

問題描述 給定乙個整數n,統計從1到n 數字最高位不允許為0 這麼多個數中0,1,2,3,4,5,6,7,8,9分別出現的次數。問題解決 採用遞迴求解統計每乙個數字0,1,2,9出現的次數累加。源 include stdafx.h include int results 10 void count ...