给 定 一 个 k 位 整 数 N = d k − 1 10 k − 1 + ⋯ + d 1 10 1 + d 0 ( 0 ≤ d i ≤ 9 , i = 0 , ⋯ , k − 1 , d k − 1 > 0 ) , 请 编 写 程 序 统 计 每 种 不 同 的 个 位 数 字 出 现 的 次 数 。 例 如 : 给 定 N = 100311 , 则 有 2 个 0 , 3 个 1 , 和 1 个 3 。 给定一个 k 位整数 N=d k−1 10 k−1 +⋯+d 1 10 1 +d 0 (0≤d i ≤9, i=0,⋯,k−1, d k−1 >0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。 给定一个k位整数N=dk−110k−1+⋯+d1101+d0(0≤di≤9,i=0,⋯,k−1,dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N=100311,则有2个0,3个1,和1个3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
题解一:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
int Number[] = new int[10];
for (int i = 0; i < str.length(); i++) {
int n = str.charAt(i) - '0';
Number[n]++;
}
for (int i=0;i<10;i++){
if(Number[i] == 0)
continue;
System.out.println(i + ":" + Number[i]);
}
}
}
题解二:
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
HashMap<Integer,Integer> hashMap = new HashMap<>();
String str = scanner.next();
for(int i=0;i<str.length();i++){
int n = str.charAt(i) - '0';
if(hashMap.containsKey(n)){
hashMap.put(n,hashMap.get(n)+1);
}
else {
hashMap.put(n,1);
}
}
for(Map.Entry<Integer, Integer> i:hashMap.entrySet()){
System.out.println(i.getKey() + ":" + i.getValue());
}
}
}