欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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;
} 

通关截图:
PTA刷题记录:L1-003 个位数统计 (15分)

值得一提:
这道题我写了很多遍,每一次的结果都是没问题的,但是总是出现一个错误,最后我发现是输入有问题:得以一个字符串的形式输入这个整数。。。而我出错的代码都是用 int 型数据输入的。因为 int 型能存放的整型数据可远远到达不了 1000 位。

本文地址:https://blog.csdn.net/weixin_45711556/article/details/107867602

相关标签: PTA c++