PTA打卡--个位数统计(java && c++)

原题链接
在这里插入图片描述

  1. 方法一,我们使用最简单的list + map集合
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String n = in.nextLine();
        HashMap<Integer,Integer> map = new HashMap();
        List<Integer> list = new ArrayList();
        for(int i=0;i<n.length();i++){
            //这边 -‘0’很重要,需要转换成数字
            list.add(Integer.valueOf(n.charAt(i) - '0'));
        }
        for(int i=0;i<list.size();i++){
            if(map.get(list.get(i)) == null){
                map.put(list.get(i),1);
            }else{
                int num = map.get(list.get(i));
                map.put(list.get(i),++num);
            }
        }
        //每次遍历list集合的时候总会遇到重复的,所以我们使用一个boolean数组,这样就可以排除已经访问过的位置了。
        boolean[] used = new boolean[10];
        Collections.sort(list);
        for(int i=0;i<list.size();i++){
            if(used[list.get(i)] == false) {
                System.out.println(list.get(i) + ":" + map.get(list.get(i)));
                used[list.get(i)] = true;
            }
        }
    }
}
  1. 我们可以看到这样非常麻烦,那我们可以想一下,因为每一个位置上的数字都是在[0,9]之间,所以我们可以直接定义一个长度为10的数组,用来记录每一个数字的个数;
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String N = in.nextLine();
        int[] nums = new int[10];
        for(int i=0;i<N.length();i++){
            int index = Integer.valueOf(N.charAt(i) - '0');
            nums[index]++;
        }
        for(int i=0;i<nums.length;i++){
            if(nums[i] == 0){
                continue;
            }
            System.out.println(i + ":" + nums[i]);
        }
    }
}

3.最后,近期在学习c++,附上一个C++版本吧

#include<iostream>
#include<string>
#include<sstream> 
using namespace std;
int main(){
	string n;
	//因为这边输入的是字符串,所以不能直接用cin
//	cin >> n;
	getline(cin,n);
	//c++中要在用之前一定要赋初值,不像java那样,java中不赋初值就会直接报错
	int nums[10] = {0};
	for(int i=0;i<n.length();i++){
	//这边使用的是c++中的流,这个很厉害,后期我再深入研究一下
		stringstream sstream;
		int index; 
		//这边就是读取字符串中的字符放到流中去
		sstream << n[i];
		//将流中的数据转换成int类型,然后再赋值给index
		sstream >> index;
		nums[index]++;
	}
	//sizeof(nums)是nums数组所占的内存,sizeof(nums[0])是某一个元素所占的内存,那么这样就可以计算总的数组长度
	int len = sizeof(nums)/sizeof(nums[0]);
	for(int i=0;i<len;i++){
	//为了去除那些字符串中都没有出现的数据
		if(nums[i] == 0){
			continue;
		}
		cout << i << ":" << nums[i] << endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/harryshumxu/article/details/106062972
今日推荐