目錄
問題描述:
演算法設計:
資料輸入:
結果輸出:
課後答案:(有人將其稱為---補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 ...