PAT 乙级题目讲解:1012《数字分类》
📅 2026/7/4 9:01:01
👁️ 阅读次数
📝 编程学习
✅ PAT 乙级题目讲解:1012《数字分类》
摘要:本文详细讲解 PAT 乙级 1012 题《数字分类》的完整解题过程。题目要求对一系列正整数按模 5 余数分成五类,分别完成求和、交错求和、计数、求平均值、求最大值等运算,无数据时输出
N。文章从题目分析、样例拆解入手,结合变量设计与代码实现,给出 C++ 满分题解,并总结常见错误与输出格式要点。适合 PAT 备考初学者理解分类统计模型与模拟类题目的处理套路。
🧩 题目简介
本题要求对一系列正整数按特定规则分类,并依次输出五类指标:
- A1A_1A1:能被 5 整除的偶数的和;
- A2A_2A2:被 5 除余 1 的数字交错求和(正负交替);
- A3A_3A3:被 5 除余 2 的数字个数;
- A4A_4A4:被 5 除余 3 的数字平均值(保留一位小数);
- A5A_5A5:被 5 除余 4 的数字中的最大值。
若某类数字不存在,用N代替输出。
🧪 样例分析
输入:
13 1 2 3 4 5 6 7 8 9 10 20 16 18各分类如下:
- A1A_1A1:
10和20,都是能被 5 整除且为偶数 → 和为30 - A2A_2A2:
6、1、16→ 被 5 除余 1 → 依次交错相加:1−6+16=111 - 6 + 16 = 111−6+16=11 - A3A_3A3:
2、7→ 被 5 除余 2 → 个数为2 - A4A_4A4:
3、8、18→ 被 5 除余 3 → 平均值为(3+8+18)/3=9.7(3 + 8 + 18) / 3 = 9.7(3+8+18)/3=9.7 - A5A_5A5:
4、9→ 被 5 除余 4 → 最大值为9
输出:
30 11 2 9.7 9🔍 解题思路
📎 变量说明
| 变量名 | 含义 |
|---|---|
n | 输入的数字总个数 |
t | 当前读入的数字 |
a[10] | 存储每类数字的累加值或最大值 |
c2 | A2 类的计数器,用于判断加还是减 |
c4 | A4 类的计数器,用于计算平均数分母 |
f[10] | 标记各类是否存在有效数字 |
✅ Step 1:读入所有数字并分类处理
分类依据是tmod5t mod 5tmod5:
while(n--){cin>>t;if(t%2==0&&t%5==0){f[1]=1;a[1]+=t;}if(t%5==1){c2++;if(c2%2)a[2]+=t;elsea[2]-=t;f[2]=1;}if(t%5==2){a[3]++;f[3]=1;}if(t%5==3){a[4]+=t;c4++;f[4]=1;}if(t%5==4&&t>a[5]){a[5]=t;f[5]=1;}}✅ Step 2:输出格式控制
注意:
- 不存在的分类输出
N - A4A_4A4保留一位小数
- 每个值之间以空格隔开,末尾不加多余空格
for(inti=1;i<=5;i++){if(!f[i]){printf("N");}elseif(i==4){printf("%.1lf",a[4]*1.0/c4);}else{printf("%d",a[i]);}if(i<5)printf(" ");}✅ 完整代码
#include<bits/stdc++.h>usingnamespacestd;inta[10],n,t,c2,c4;boolf[10];// 标记 a[i] 是否存在intmain(){cin>>n;while(n--){cin>>t;if(t%2==0&&t%5==0){f[1]=1;a[1]+=t;}if(t%5==1){c2++;if(c2%2)a[2]+=t;elsea[2]-=t;f[2]=1;}if(t%5==2){a[3]++;f[3]=1;}if(t%5==3){a[4]+=t;c4++;f[4]=1;}if(t%5==4&&t>a[5]){a[5]=t;f[5]=1;}}for(inti=1;i<=5;i++){if(!f[i]){printf("N");}elseif(i==4){printf("%.1lf",a[4]*1.0/c4);}else{printf("%d",a[i]);}if(i<5)printf(" ");}return0;}🚧 常见错误提醒
| 错误类型 | 说明 |
|---|---|
| 忘记判断是否存在数据 | 未使用f[i]判断是否需要输出N |
| A2A_2A2正负号处理错误 | 应用交错加减(奇加偶减) |
| A4A_4A4小数处理不精确 | 忘记保留一位小数 |
| 输出格式问题 | 空格控制或末尾多空格 |
✅ 总结归纳
- 本题核心在于“分类 + 模拟 + 格式控制”
- 每类统计逻辑独立,可单独处理
- 输出格式是考试中常见扣分点,注意边界和控制细节
时间复杂度:O(n)O(n)O(n)
空间复杂度:O(1)O(1)O(1)(使用常数空间)
🧠 思维拓展
- 本题可作为“分类统计”模型题,适合初学者熟悉基本输入处理与条件判断;
- 可尝试封装成函数处理五类逻辑,增强代码模块化;
编程学习
技术分享
实战经验