【GPLT】L1-003【PAT乙级】个位数统计

正文索引 [隐藏]

题目描述:

给定一个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。

输入描述:

每个输入包含1个测试用例,即一个不超过1000位的正整数N.

输出描述:

对N中每一种不同的个位数字,以d:M的格式在一行中输出该位数字d及其在N中出现的次数M.要求按d的升序输出。

输入样例:

100311

输出样例:

0:2
1:3
3:1

解题思路:

首先,根据题意可知这是一道水题,那么问题来了,怎么在写水题的同时秀一波操作呢?便便额,我用一个map<char, int>来存放出现过的数字并记录下出现的次数,然后用for-each循环来对map进行遍历并输出出现过的数字和出现的次数。

AC代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string N;
    cin >> N;
    //用map来统计不同的各位数字出现的次数
    map<char,int> m;
    for(auto it : N)
    {
        m[it]++;
    }
    for(auto it : m)   //for-each输出所有的出现过的数字及其出现次数
    {
       cout << it.first << ":" << it.second << endl;
    }
    return 0;
}