写在最前:欢迎批评,欢迎任意地方的指正,用你们的优秀的java代码砸死我吧!!
问题——————
给定一个 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
解题思路:
非常简单的题,统计键是0到9十个数字,顺理成章的就可以用一个长度为10的数组来存储,省去了对数字的排序,并且也不用查找,非常方便,直接通过遍历字符串解决即可,不需要每次除10取余。
package not.die.in.here;
//满分15
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _1021_NumCheck {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
char[] buf = bf.readLine().toCharArray();//放字符数组中遍历查看
int[] num = new int[10];
for(int i=0;i<buf.length;i++) {
num[buf[i]-48]++;//对应字符减去48就是int值,三个重要的ascii码值分别是48,65和97,对应0,A和a
}
for(int i=0;i<10;i++) {
if(num[i]!=0)
System.out.println(i+":"+num[i]);//如果不是零就输出对应数字的数量
}
}
}