PAT题型分类 & 跟着《算法笔记》撸PAT的记录汇总

来源:互联网 发布:美图还原软件 编辑:程序博客网 时间:2024/06/05 04:47

这篇博客记录了我在跟着《算法笔记》以及习题册《算法笔记 上级实践指南》刷了PAT的题目之后的一些解题方法的总结与心得。

第三章 入门模拟

1. 简单模拟

一般解题思路

这一小节的题目只需根据题目描述(一般规则很简单),用代码实现即可;有些题目在用到一下知识点之后变得更简便。

学到的知识点

  1. /和%运算符的强大作用
  2. 数组下标映射打表
  3. 循环问题的解题思路(left to right = sum - (right to left))
    注:知识点的具体运用可以进入下面题目的题解查看。

题目汇总

PAT-B 1001 害死人不偿命的(3n+1)猜想 (15)
PAT-B 1011.A+B和C (15)
PAT-B 1016. 部分A+B (15)
PAT-B 1026. 程序运行时间(15)
PAT-B 1046. 划拳(15)
PAT-B 1008. 数组元素循环右移问题 (20)
PAT-B 1012. 数字分类 (20)
PAT-B 1018. 锤子剪刀布 (20)
PAT-A 1042. Shuffling Machine (20)
PAT-A 1046. Shortest Distance (20)
PAT-A 1065. A+B and C (64bit) (20)
PAT-B 1010. 一元多项式求导 (25)
PAT-A 1002. A+B for Polynomials (25)
PAT-A 1009. Product of Polynomials (25)

2. 查找元素

一般解题思路

在“查找元素”这个小节的题目中,一般会有两种思考的角度:

角度1. 将所有输入读入并保存,遍历所有输入,找到需要查找的元素角度2. 一边读入一边覆盖,最后保存的就是需要查找的元素

题目汇总

PAT-B 1041. 考试座位号(15)
PAT-B 1004. 成绩排名 (20)
PAT-B 1028. 人口普查(20)
PAT-B 1032. 挖掘机技术哪家强(20)
PAT-A 1011. World Cup Betting (20)
PAT-A 1006. Sign In and Sign Out (25)
PAT-A 1036. Boys vs Girls (25)

3. 图形输出

一般思路

图形打印这类题一般有两种做法:
1. 将要输出的内容填充到二位数组中,输出二维数组
2. 直接输出需要输出的东西

法二探索:
对于第二种方法,我认为有三要素:需要打印的行数、需要打印的列数、每行打印的规则。 一旦这三要素确定了,图形基本就出来了。

三要素的获取方法,遇到的两种较多的类型是找规律数学推算

法一探索:
对于第一种方法,二维数组的填充,也是通过找到规律,填充进去。这种情况用在每一行的规律不是那么好找的情况下,利用二维数组可随机访问的性质,将信息填入数组,这样就便利得多。题目汇总的第二题有所体现。

类似“沙漏”这种棱角分明的图形规律寻找:
这种图形的规律一般可以拿出边界线(较简单的情况为直线)的直线方程,通过直线方程x,y(控制输出的循环变量)的大小关系来控制输出信息。
如果可以比较容易的看出规律或输出变量之间的关系当然更便捷。

题目汇总

PAT-B 1027. 打印沙漏(20)
PAT-A 1031. Hello World for U (20)

4. 日期处理

在《算法笔记》中,“日期处理”的问题分类在“入门模拟”章节,解决这类题目不易出错、方便理解的方法也的确是通过“模拟”现实世界的日期更近的情况(时间都是一秒一秒往前走的),来知道代码的实现。

下面题目汇总的第一题有非常好的体现。

题目汇总

codeup 1928 日期差值

新颖的日期比较方法:long long 型数据直接比较法。(这种思想在“查找元素”小节也用到很多)

5. 进制转换

这一小节的题目比较少且有固定方法可寻,所以当时做完非常开心,忘记记录了,距离今日已经较久远(从家到学校到现在马上要上第二周的课,时间过得真快),当时做题的感受有些记不太清楚,只能凭借题解记录来找回一些做题的记忆志之,日后若有新的收货再记之。

看完题解发现有两点比较关键的:

  1. 下面的“题目汇总”第一题题解记载了该类问题的一般解法
  2. 一般解法的关键其实还是建立在充分理解除法和取余运算以及循环思想

题目汇总

PAT-B 1022. D进制的A+B (20) → 记录了“进制问题的一般方法”
PAT-B 1037. 在霍格沃茨找零钱(20)
PAT-A 1019. General Palindromic Number (20)
PAT-A 1027. Colors in Mars (20)
PAT-A 1058. A+B in Hogwarts (20)

6. 字符串处理

字符串处理的题目应该算这一章最难的了,可以说这类题目真的是千变万化,没有什么固定思想。需要我非常仔细的观察题目中的输入和输出的通知,还需要注意很多细节以及边界条件,常常是逻辑非常麻烦。

目前这一小节有题目在未解队列里。

题目汇总

PAT-B 1006. 换个格式输出整数 (15)
PAT-B 1021. 个位数统计 (15)
PAT-B 1031. 查验身份证(15)
PAT-B 1002. 写出这个数 (20
PAT-B 1009. 说反话 (20)
PAT-B 1014. 福尔摩斯的约会 (20)
PAT-A 1061. Dating (20)
PAT-B 1024. 科学计数法 (20)
PAT-B 1048. 数字加密(20)
PAT-A 1005. Spell It Right (20)
PAT-A 1001. A+B Format (20)
PAT-A 1035. Password (20)
PAT-A 1077. Kuchiguse (20)
1082. Read Number in Chinese (25) → 入队

第四章 算法初步

1、排序

这一章运用在题中主要还是sort函数的使用,其中最为重要的是sort函数的cmp函数的编写。

cmp函数的编写有时候需要考虑“分类”这样的概念,比如下面题目汇总的第一题。
cmp函数的编写记忆规律是:若return a

题目汇总

PAT-B 1015. 德才论 (25)
PAT-A 1062. Talent and Virtue (25)
1016. Phone Bills (25) -> 入队
PAT-A 1025. PAT Ranking (25)
PAT-A 1028. List Sorting (25)
PAT-A 1055. The World’s Richest (25)
PAT-A 1075. PAT Judge (25)
PAT-A 1083. List Grades (25)
PAT-A 1080. Graduate Admission (30) ->有测试点没过
PAT-A 1095. Cars on Campus (30) ->入队

2、散列

这一章主要涉及到是字符串的散列,并且是简单散列,只需要打一张hashTable就可以。

题目汇总

PAT-B 1029. 旧键盘(20)
PAT-A 1084. Broken Keyboard (20)
PAT-B 1033. 旧键盘打字(20)
PAT-B 1039. 到底买不买(20)
PAT-A 1092. To Buy or Not to Buy (20)
PAT-B 1042. 字符统计(20)
PAT-B 1043. 输出PATest(20)
PAT-B 1047. 编程团体赛(20)
PAT-A 1041. Be Unique (20)
PAT-A 1050. String Subtraction (20)
PAT-B 1005. 继续(3n+1)猜想 (25)
PAT-A 1048. Find Coins (25)

3、递归

暂且不多说,心累……
看这里。

4、贪心

贪心是一种算法思想。对于贪婪的人类,在想获得“最大利益”的时候,总是需要在每个环节都拿到“最高分”,这就是贪心的本质。所以贪心的思想不难,因为基本贯彻了人的一生;想到贪心的策略,一般也不太难;难点在于对策略的证明。
好在程序中不需要有证明过程,只需要确切保证策略的正确性即可。

题目汇总

PAT-B 1023. 组个最小数 (20)
PAT-B 1020. 月饼 (25)
PAT-A 1070. Mooncake (25)
PAT-A 1033. To Fill or Not to Fill (25)
PAT-A 1037. Magic Coupon (25)
PAT-A 1067. Sort with Swap(0,*) (25)
PAT-A 1038. Recover the Smallest Number (30)

5、二分查找

二分查找这么几道题刷了好久……手动哭泣,有几题需要注意的比较多。不过终于是全都AC了,没有进队列了,嘻嘻。
在《算法笔记》中的这一小节,晴神讲了不少东西,题目中遇到了的是两种情况:
1. 二分查找一个数
2. 二分查找一个数,这个数是第一个满足某条件的位置
这两种问题写法上有差别,暂时不记录了,有时间回来记录吧。

刷PAT的时间也马上到头了,有现阶段更加重要和紧急的事情需要处理。撸PAT的这段时间感觉非常好,喜欢~感谢晴神!我一定还会接着刷,以及刷第二遍,第三遍的……

题目汇总

PAT-B 1030. 完美数列(25)
PAT-A 1085. Perfect Sequence (25)
PAT-A 1010. Radix (25)
PAT-A 1044. Shopping in Mars (25)
PAT-A 1048. Find Coins (25)

6、two pointers

有了前面的难受,这一节要好很多,并且很多都是之前的题目,two pointers 真是一种强大的思想。

暂且不描述什么是two pointers,从题目中去体会吧。

题目汇总

PAT-B 1030. 完美数列(25)
PAT-A 1085. Perfect Sequence (25)
PAT-A 1089. Insert or Merge (25)
PAT-A 1029. Median (25)
PAT-A 1048. Find Coins (25)

7、其他高效技巧与算法

在这一节中,《算法笔记》介绍了:
1. 打表
2. 递推
3. 随机选择算法

其中打表+递归解决了下面“题目汇总”的前两道题,将时间复杂度降到了O(N)。

随机选择算法《算法笔记》(PAT题解)暂时没有对应题目,等遇上题目再总结。主要解决的是“求一个序列中第K大的数”这样的一个问题。

题目汇总

PAT-B 1045. 快速排序(25)
PAT-A 1101. Quick Sort (25)
PAT-B 1040. 有几个PAT(25)
PAT-A 1093. Count PAT’s (25)

停更

2017-03-26
这篇博客暂时停更,希望回来接着更新的时候,自己依然是条好汉!!!为自己加油~

ps:《算法笔记》(胡凡 著)是本好书,推荐买来看,哈哈。

0 0