PAT B1021 个位数统计(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1021 个位数统计

解题思路

字符串处理:遍历字符串,统计每个字符出现的次数

也许陌生的知识点

  • for(auto it = m.begin(); it != m.end(); it++){}
    • 可用于遍历 map/vector/set 等容器, auto 实现自动匹配对应迭代器类型
    • 如果不用 auto it = m.begin() 则要写成 std::map<char, int>::iterator it = m.begin()
    • map<char,int> 在其他情况下可替换成对应元素的类型如 vector<int>
    • 所需头文件: map / set / vector
  • it->firstit->second
    • it->first 为 map 中对应元素的关键字
    • it->second 为 map 中对应关键字的值
    • 所需头文件: map

代码示例:

  • 方法1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <string>
    #include <map>
    #include <iostream>
    using namespace std;
    int main(){
    string A;
    map<char, int> m;
    cin >> A;
    for(int i = 0; i < A.length(); i++){
    m[A[i]]++;
    }
    for(auto it = m.begin(); it != m.end(); it++){
    cout << it->first << ":" << it->second << endl;
    }
    return 0;
    }
  • 方法2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main(){
string A;
int num[10] = {0};
cin >> A;
for(int i = 0; i < A.length(); i++){
int k = A[i] - 48;
num[k]++;
}
for(int i = 0; i < 10; i++){
if(num[i] > 0){
printf("%d:%d\n", i, num[i]);
}
}
return 0;
}