pat乙级
狼行远山
也无风雨也无晴
展开
-
pat乙级 1012 题解
整体思路简单,但需要注意两点细节: 1.float=int/int与float=(float)int/int 两个表达式的区别 前者是将int/int计算的结果强制转换为float类型,小数部分一定为0,而后者是将被除数强制转换为float类型,这样计算的结果为float类型,小数部分不一定为0 输出时使用printf("%.1f") 2. 其他几类数字的相关结果为非负数,判断是否存在该类数字的条件简单而统一,即相应的计算函数中的计数器是否为0 而A2的情况较为特殊,其结果不一定为非负数,因此即原创 2021-08-19 10:51:39 · 172 阅读 · 0 评论 -
pat乙级 1011 题解
整体思路非常简单,只需注意ABC值所在的范围超出了int类型变量所能表示的数值范围,因此应选用long类型变量存储ABC,对应的scanf与printf中也应使用%ld而非%d即可 代码如下: #define_CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> intmain() { intt; scanf("%d",&t); inti; ...原创 2021-08-19 08:51:35 · 136 阅读 · 0 评论 -
pat乙级 1010 题解
一、整体思路ji 读入相应的系数-指数对后将该对中的系数与指数分别存入相应的系数数组与指数数组,分以下两种情况输出对应数据 1.输出的一元多项式为零多项式,指数和系数都是 0,也即输入的一元多项式的指数为0且仅含有组系数-指数对 2.输出的一元多项式不为零多项式,则输出其求导后的多项式的对应数据 二、关键问题 1.如何实现输入数据的读取 2.在输出求导后的多项式的其中一个系数-指数对后,什么情况下会输出0 三、关键问题对应的解决方法 1.遍历输入的字符串,当遍历到空格符时该空格符的下原创 2021-08-18 22:21:03 · 274 阅读 · 0 评论 -
pat乙级 1009 题解
零、错误原因 在接受本题中这种含有空格的字符串时选择了scanf而不是gets,导致读取到的字符串只是第一个空格前的单词 一、整体思路 读入输入的字符串后,依次找出字符串中的每一个单词并存储在对应数组中,最后再反向输出 二、关键问题 1.如何找出字符串中的每一个单词 2.如何实现各单词的分别存储 三、关键问题对应的解决方法 1.遍历输入的字符串,当遍历到空格符时该空格符的下一个字符即为下一单词的内容 2.使用二维数组存储各单词,二维数组的行数标志着各单词的顺序与对应地址,当遍历原创 2021-08-18 10:36:12 · 279 阅读 · 0 评论 -
pat乙级 1008 题解
一、整体思路 读入相应的输入数据后,对数组进行右移后输出 二、关键问题 1.如何实现数组的右移 三、关键问题对应的解决方法 1.进行m次以下过程(每次右移1位) 保存数组的末位元素,将数组中第0位到倒数第二位的元素右移一位,再将末位元素的值赋给第0位 四、数据结构 使用一个int变量存储数组每次右移一位前的末位,以将其赋给第一位 代码如下: #define_CRT_NONSTDC_NO_WARNINGS #include<stdio.h> #inclu..原创 2021-08-18 09:17:53 · 118 阅读 · 0 评论 -
pat乙级 1007 题解
一、整体思路 读入n后检索出2~n之间的所有素数,将其存放进一个数组中,再依次计算数组中相邻两个元素之间的差值,若差值为2则满足猜想的素数对的个数+1 二、关键问题 1.如何判断一个数n是否是素数 三、关键问题对应的解决方法 1. 将n依次除以2~sqrt(n)之间的每一个数,若能整除其中一个则该数不为素数(相较2~n-1减少运行时间) 四、数据结构 用int数组标志1~n之间的每一个数是否为素数 用int数组存放所有素数以简化查找满足猜想的素数对的过程 五、一些小细节原创 2021-08-18 08:45:16 · 140 阅读 · 0 评论 -
pat乙级 1006 题解
一、整体思路 读入n后按题目所给格式进行输出 二、关键问题 1.如何按题目所给格式输出 2.如何简化输出个位的过程(十位、百位同理) 三、关键问题对应的解决方法 1.根据n的位数分类进行输出 若n为个位数,则按格式输出个位 若n为十位数,则按格式输出十位与个位 若n为百位数,则按格式输出百位、十位与个位 2. 拿到的个位为char类型,可借助for循环与相应的表达式通过printf("%c",'0'+i-0)完成 关键点在于理解'0'与char,0与int之间的关系与相对关系原创 2021-08-17 19:09:48 · 116 阅读 · 0 评论 -
pat乙级 1005 题解
一、整体思路 先读入这K个数,再判断其中哪些是关键数,最后取出关键数并对其进行降序排列与输出 二、关键问题 1.关键数是什么 2.如何找出一个数字序列中的关键数 三、关键问题对应的解决方法 1.通过找出一个数字序列中的关键数的例子阐述什么是关键数 数字序列为:3 5 6 7 8 11 数字3的卡拉兹猜想验证过程为:3 5 8 4 2 数字5的卡拉兹猜想验证过程为:5 8 4 2 数字6的卡拉兹猜想验证过程为:6 3 5 8 4 2 数字7的卡拉兹猜想验证过程为:7 11 17原创 2021-08-17 16:39:26 · 118 阅读 · 0 评论 -
pat乙级 1004 题解
数据结构上采用二维数组分别存储姓名与学号,使用int数组存储成绩,整体思路较为简单,不过需要留意一个细节,题目所给条件“均为不超过 10 个字符的字符串”中所说的字符串长度并未计算\0字符,在定义数组时需要为\0字符预留位置 在这一点上踩了坑,某个测试用例中学号恰好为10个字符,而我最初使用charnumber[100][10]存储学号,使得存储该字符串时未能补入\0字符,导致输出时出错,输出了该学号与下一学号 代码如下: #define_CRT_SECURE_NO_WARNINGS #..原创 2021-08-17 09:54:29 · 233 阅读 · 0 评论 -
pat乙级 1003 题解
= == / \ 全局变量的初始值 PAAAPAATAAA 误伤AAPATAA原创 2021-08-17 09:38:17 · 226 阅读 · 0 评论 -
pat乙级 1002 题解
思维难度与编码难度均不大,当然对我现在的水平来说还是有一些挑战的,做出来也比较有成就感,可惜在一开始选择了错误的方向因而花费了许多时间 刚做过1001,受惯性思维影响,依然选择使用int变量去接受输入,但实际上1002中n的范围与1001(不超过 1000 的正整数)大相径庭,不能作相同处理。本题中n的范围是小于10^100,直观感觉是1后面跟100个0,这个数字已经远远超过了long long类型所能表示的最大数值,所以需要用字符串数组去接受输入 正确的解法放在后面再谈,先说最初的错误的解法 代原创 2021-08-11 20:32:58 · 185 阅读 · 0 评论 -
pat乙级 1001 题解
非常简单的题目,按部就班翻译即可。 太久没敲程序了,连C取余数的运算符(%)都忘记了。 代码如下: #include <stdio.h> int main() { int n; scanf("%d",&n); int count; for(count=0;n!=1;count++) { if(n%2==0) n=n/2; else n=(3*n+1)/2; } pri...原创 2021-08-10 09:50:12 · 103 阅读 · 0 评论