PTA–1021 个位数统计 (15分)
题目:
给定一个 k 位整数
N
=
d
k
−
1
1
0
k
−
1
+
⋯
+
d
1
1
0
1
+
d
0
(
0
≤
d
i
≤
9
,
i
=
0
,
⋯
,
k
−
1
,
d
k
−
1
>
0
)
N=d_{k-1}10^{k−1}+⋯+d_11 0^1+d_0(0≤di≤9, i=0,⋯,k−1, d_{k−1}>0)
N=dk−110k−1+⋯+d1101+d0(0≤di≤9,i=0,⋯,k−1,dk−1>0)
请编写程序统计每种不同的个位数字出现的次数。
例如:给定
N
=
100311
N=100311
N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以D:M
的格式在一行中输出该位数字D
及其在 N 中出现的次数 M
。要求按 D
的升序输出。
输入样例 1:
100311
输出样例 1:
0:2
1:3
3:1
题目分析:
- 首先题目意思是要我们统计每一个数字出现的次数,我们输入的是不超过1000位的数字(超出了
long long
的范围所以可以考虑使用字符串),通过字符串将每个数字出现的此处存储在数组当中,最后从小到大按格式输出出现过的数字的次数。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
char number[1005]; //数据输入的预先处理
int i,sum_num[10];
memset(sum_num,0,sizeof(sum_num));
cin>>number; //数字输入
for(i=0;i<strlen(number);i++) //记录每位数字在N中出现的次数
sum_num[number[i]-'0']++;
for(i=0;i<10;i++) //输出每位数字在N中出现的次数
if(sum_num[i]!=0)
printf("%d:%d\n",i,sum_num[i]);
return 0;
}