PAT乙级1021,使用char数组来存储

1021 个位数统计 (15分)

给定一个k位整数N=dk−1

10k−1

+⋯+d1

101

+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

题目解析:
题目要求就是统计所给字符串中每个数字的个数,升序输出,题目开头给的公式能不能看懂对这道题没什么影响。

输入的数字不超过1000位,显然不能使用int,long来存储,我这里使用char类型的数组存储每一位数字,同时定义记录每个数出现次数的count数组,长度为10,数组下标0-9所对应的位置分别存储该下标出现的次数,最后把count数组不为0的项从左到右按照输出格式输出。

AC代码:

 
import java.util.Scanner;
public class Main {
    
    
public static void main(String[] args) {
    
    
Scanner s=new Scanner(System.in);
char c[]=s.next().toCharArray();
//count[0]代表0数字出现的次数,count[1]代表1数字出现的次数,……
int[] count={
    
    0,0,0,0,0,0,0,0,0,0};
//记录每个数字出现的次数
for(int i=0;i<c.length;i++){
    
    
/*这一行代码是这道题的精华,c[i]-48就代表阿拉伯数字c[i],
我这里举个例子,比如c[i]='1',那么c[i]-48就是阿拉伯数字1
然后count[1]++,就代表1这个数字出现次数加1
*/
count[c[i]-48]++;
}

//按照题目输出格式输出,输出出现次数不是0的
for(int i=0;i<count.length;i++){
    
    
if(count[i]!=0){
    
    
System.out.println(i+":"+count[i]);
}
}
}
}

更多提题目解析可关注公众号算法宝贝

猜你喜欢

转载自blog.csdn.net/CSDN_Lrcx/article/details/116167769