【算法分析】統計1到N中一共用到多少個0,1,2,3......


統計數字問題:

(1)、問題描述

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

(2)、算法設計

給定表示書的總頁碼的10 進制整數n (1≤n≤10) 。編程計算書的全部頁碼中分別用到多少次數字0,1,2,…,9。

java實現

public class Lab101 {
	public static void main(String[] args) {
		Lab101 lab = new Lab101();
		lab.func(9);
		for (int i = 0; i < 10; i++) 
			System.out.println(i + "統計:" + lab.stat[i]);
	}
	int stat[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
	public void func(int num) {
		int tmp = num;
		while (tmp >= 10) {
			stat[tmp % 10]++;
			tmp /= 10;
		}
		stat[tmp]++;
		if (num > 0)
		func(--num);
	}
}

  上面的方法因為遞歸比較多,java虛擬機的棧數量有限制,會出現java.lang.StackOverflowError錯誤,所以就改用循環方法

public class Lab101 {
	public static void main(String[] args) {
		int stat[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
		for (int i = 1000; i < 100000; i++) {
			int tmp = i;
			while (tmp >= 10) {
				stat[tmp % 10]++;
				tmp /= 10;
			}
			stat[tmp]++;
		}
		for (int j = 0; j < 10; j++) 
			System.out.println(j + "統計:" + stat[j]);
	}
}

  

  若有更好的算法,請指點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM