PTA刷题记录:L1-003 个位数统计 (15分)
程序员文章站
2022-04-16 19:13:16
L1-003 个位数统计题目要求:给定一个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 中出现的次数...
L1-003 个位数统计 (15分)
题目要求:
给定一个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 的元素及其对应的数字输出,其对应的数字即为元素对应的下标值。
通关代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
int arr[10]{0};
cin >> str;
for (string::iterator p = str.begin(); p != str.end(); p++) {
switch (*p) {
case '0': arr[0]++; break;
case '1': arr[1]++; break;
case '2': arr[2]++; break;
case '3': arr[3]++; break;
case '4': arr[4]++; break;
case '5': arr[5]++; break;
case '6': arr[6]++; break;
case '7': arr[7]++; break;
case '8': arr[8]++; break;
case '9': arr[9]++; break;
}
}
for (int i = 0; i < 10; i++) {
if (arr[i] != 0) {
cout << i << ":" << arr[i] << endl;
}
}
return 0;
}
通关截图:
值得一提:
这道题我写了很多遍,每一次的结果都是没问题的,但是总是出现一个错误,最后我发现是输入有问题:得以一个字符串的形式输入这个整数。。。而我出错的代码都是用 int 型数据输入的。因为 int 型能存放的整型数据可远远到达不了 1000 位。
本文地址:https://blog.csdn.net/weixin_45711556/article/details/107867602