要求:
統計一個整數中出現最多的數字。如果數字個數一樣,則以最大的數字爲準,例如 1 輸出 1,121 輸出 1,23231 輸出 3。
針對這個問題,處理步驟可以分爲2步:
第一步:首先抽離整數中的每個數字,並且放到該數字對應的桶數組中,桶數組是一個長度爲10的數組,其中數組的每個索引都表示整數中可能出現的數字,數組索引0到9剛好表示0到9這10個數字。至於抽離數字可以先將整數對10取模,得到的最低位的數字,再將該數字對應的數組位置的元素加1,接着再將整數除以10,這樣到整數爲0時,就已抽離出整數中的所有數字。
第二步:現在桶數組中的10個元素表示的是整數中所有數字的出現次數,例如573257抽離完後數組中所因爲2,3,5,7的四個位置的值應該爲1,1,2,2。循環得到數組中的最大元素,並且保留索引。如果有兩個數字出現次數一樣,遍歷桶數組也能獲取整數中其中最大的數字,大家仔細想想就知道了。
代碼
public class NumberStat {
public static void main(String[] args) {
int number = 573257;
//桶數組,數組的索引就表示整數中的各個數字,數組元素表示該索引在數組中出現的次數
int[] barrel = new int[10];
//抽取各個數字並且放入到barrel中
getNumber(number, barrel);
int max = barrel[0]; //max存放最多的次數
int index = 0; //index存放出現次數最多的數字
for(int i=1; i<barrel.length; i++) {
if(max<=barrel[i]) {
max =barrel[i];
index = i;
}
}
System.out.println("出現次數最多的數字是:" + index + ",出現的次數是:" + max);
}
/*
* 循環地對整數對10取模,並將得到的數字放入其對應的桶中
* 接着對整數除10,當numer爲0時,所有的數字都已抽離
*/
private static void getNumber(int number, int[] barrel) {
while(number!=0) {
int num = number%10;
barrel[num]++;
number/=10;
}
}
}
出現次數最多的數字是:7,出現的次數是:2