【全网最细PAT题解】【PAT乙】1021 个位数统计

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

题目链接

1021 个位数统计

题目描述

给定一个 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;
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值