統計數字問題

2021-08-19 18:27:42 字數 1956 閱讀 2023

目錄

問題描述:

演算法設計:

資料輸入:

結果輸出:

課後答案:(有人將其稱為---補0遞迴法)

舉例說明:666

完整**:

執行結果:

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

給定表示書的總頁碼的十進位制整數n(1<=n<=10^9),計算書的全部頁碼中分別用到多少次數字0,1,2,...,9。

輸入資料檔案由名為input.txt的文字檔案提供。每個檔案只有1行,給出表示書的總頁數的整數n。

將計算結果輸出到檔案output.txt。輸出檔案共有10行,在第k行輸出頁碼中用到的數字k-1的次數,k=1,2,...,10.

輸入檔案示例

輸出檔案示例

input.txt

output.txt

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

由此可知,f(n)=n*10^(n-1).

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

1.求出其位數:3;

2.求出其最高位的數:6;

3.位數是3,大於1,最高位是6,可求出00,01,...,99共有6個(00->99; 100->199; 200-299;...;500->599),計算出0-9出現的次數;

4.求0->最高位數字,出現的次數,對應加上【步驟3】求出的次數;

5.求當數字是10的倍數時,0出現的次數加上【步驟4】中0出現的次數;

6.求出最高位數字出現次數,加上【步驟5】中對應次數;

7.拿掉最高位,繼續遞迴。

public class countnumber ;//用於存放每個數字出現次數

int pow10(int x)

return mul;

}// 求10^x

int count_number(int w)

//[步驟2]

int h = cw/pow10(i-1); //求最高位

//[步驟3]

if(i != 1)

} //[步驟4]

for(int j=0; j < h; j++)

//[步驟5]

if(cw % 10 == 0)

sum[0] += tmp;

} //[步驟6]

sum[h] += 1 + cw - h * pow10(i-1); //m位數上最高位的值所含的數字

//[步驟7]

int loop = cw - h * pow10(i - 1); //除去最高位,繼續遞迴

if(loop == 0)

else

}public static void main(string args)

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

int i = 0;

while(i < 10)

bw.flush();//把緩衝區內容寫到檔案,如果沒有這條語句,輸出檔案為空。

//使用快取型流時操作完成後必須加上flush語句。

統計數字問題

在王曉東編著的 演算法設計與實驗題解 中看到的這個問題,問題描述如下 一本書的頁碼從自然數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 ...