题目链接
题目描述
给定一个 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
题目大意
给你一个1000位以内的数字,让你判断0~9各出现了几次并输出
解题思路
利用了桶排序,创建一个大小为10,下标为0~9的数组
数组的下标代表了0~9十个数字,而不同下标的数组值代表了当前数字出现的次数
拿题例举例100311,当从头到位遍历一遍数组,并进行
num[s[i]-'0']++;
得到的num数组为

所以为了得到结果,==只需要输出数组值不为零的下标:数组值==即为结果
题解
#include<bits/stdc++.h>
using namespace std;
int num[15];
//这里其实开长度为10就够用,个人习惯是多开五个
int main(){
string s;
cin>>s;
for(int i=0;i<s.length();i++){
num[s[i]-'0']++;
// 利用桶排序
// 数组下标就是不同的个位数字
// 数组内的值就是出现的次数
}
for(int i=0;i<10;i++){
if(num[i]!=0){
cout<<i<<":"<<num[i]<<endl;
}
}
}

文章讲述了如何利用桶排序算法来统计一个不超过1000位正整数中每个个位数字出现的次数。通过创建一个大小为10的数组,数组下标对应0-9的数字,数组值记录出现次数,遍历数字字符串完成计数。最后输出数组中非零值的下标及其对应的值作为结果。
931

被折叠的 条评论
为什么被折叠?



