PAT 乙级题目讲解:1012《数字分类》

📅 2026/7/4 8:52:30
PAT 乙级题目讲解:1012《数字分类》
✅ 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 整除且为偶数 → 和为30A2A_2A2​6、1、16→ 被 5 除余 1 → 依次交错相加1−616111 - 6 16 111−61611A3A_3A3​2、7→ 被 5 除余 2 → 个数为2A4A_4A4​3、8、18→ 被 5 除余 3 → 平均值为(3818)/39.7(3 8 18) / 3 9.7(3818)/39.7A5A_5A5​4、9→ 被 5 除余 4 → 最大值为9输出30 11 2 9.7 9 解题思路 变量说明变量名含义n输入的数字总个数t当前读入的数字a[10]存储每类数字的累加值或最大值c2A2 类的计数器用于判断加还是减c4A4 类的计数器用于计算平均数分母f[10]标记各类是否存在有效数字✅ Step 1读入所有数字并分类处理分类依据是tmod5t mod 5tmod5while(n--){cint;if(t%20t%50){f[1]1;a[1]t;}if(t%51){c2;if(c2%2)a[2]t;elsea[2]-t;f[2]1;}if(t%52){a[3];f[3]1;}if(t%53){a[4]t;c4;f[4]1;}if(t%54ta[5]){a[5]t;f[5]1;}}✅ Step 2输出格式控制注意不存在的分类输出NA4A_4A4​保留一位小数每个值之间以空格隔开末尾不加多余空格for(inti1;i5;i){if(!f[i]){printf(N);}elseif(i4){printf(%.1lf,a[4]*1.0/c4);}else{printf(%d,a[i]);}if(i5)printf( );}✅ 完整代码#includebits/stdc.husingnamespacestd;inta[10],n,t,c2,c4;boolf[10];// 标记 a[i] 是否存在intmain(){cinn;while(n--){cint;if(t%20t%50){f[1]1;a[1]t;}if(t%51){c2;if(c2%2)a[2]t;elsea[2]-t;f[2]1;}if(t%52){a[3];f[3]1;}if(t%53){a[4]t;c4;f[4]1;}if(t%54ta[5]){a[5]t;f[5]1;}}for(inti1;i5;i){if(!f[i]){printf(N);}elseif(i4){printf(%.1lf,a[4]*1.0/c4);}else{printf(%d,a[i]);}if(i5)printf( );}return0;} 常见错误提醒错误类型说明忘记判断是否存在数据未使用f[i]判断是否需要输出NA2A_2A2​正负号处理错误应用交错加减奇加偶减A4A_4A4​小数处理不精确忘记保留一位小数输出格式问题空格控制或末尾多空格✅ 总结归纳本题核心在于“分类 模拟 格式控制”每类统计逻辑独立可单独处理输出格式是考试中常见扣分点注意边界和控制细节时间复杂度O(n)O(n)O(n)空间复杂度O(1)O(1)O(1)使用常数空间 思维拓展本题可作为“分类统计”模型题适合初学者熟悉基本输入处理与条件判断可尝试封装成函数处理五类逻辑增强代码模块化