前言
PAT乙级终于脱坑了,本来是去年就该完成的,一直拖着,甲级也刷了一半了,现在先把乙级放出来,说一下博主个人的看法。一直都记得一个老师对我们说的话:算法体现的是一个程序员基本的素质。博主很赞同这句话,因为算法体现了一个程序员的思维,而且学习算法可能是一个枯燥的过程,想提高算法是很难的。对比一下甲级和乙级,博主个人以为,乙级更像是在考察解决问题的能力,涉及的算法并多,数据结构也只有链表,而甲级考察的则是英文阅读能力以及一些算法能力,比如拓扑排序、并查集等,同时也涉及到了图和树。每次PAT考试时,乙级后两题即是甲级前两题。在比赛中,使用c语言参考的人也不少,在这里博主建议用c++,主要的原因是比较方便,好了,先把题库分享出来吧,这些都是博主自己的AC代码。
题解
一些技巧
1、在使用c++时如果超时了则用scanf和printf输入输出,如果还是超时就是算法的问题,这个时候应该审视一下自己的算法。
2、需要掌握C++的STL库,比如:vector、map、string、queue、stack、algorithm。其中algorithm里有sort函数,排序时就比较方便了。
3、掌握sprintf和sscanf函数,博主之前写了篇简介:关于sscanf以及sprintf函数。
4、掌握辗转相除法求最大公约数,两种写法:
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
int gcd(int a,int b){
return !b ? a : gcd(b,a%b);
}
5、掌握hash思想,即散列思想,这是一个比较好用的思想。
6、如果是浮点型则用double。
7、掌握结构体知识。
8、掌握判断素数的方法
bool isPrime(int n){
if(n==1||n==0) return false;
for(int i=2;i<=sqrt(1.0*n);i++)
if(n%i==0) return false;
return true;
}
9、了解贪心算法
10、了解大整数运算:大整数操作——四则运算、进制转换、比较大小
…………
另外,关于字符串处理的题,只能多做这类题,才能提高AC概率,见多才能识广嘛,STL库也要多用才会熟悉。总之其实乙级是不难的,难是因为做的题太少了,所以沉下心来,好好提升自己。当题目很复杂时,要学会分治,尽可能把问题分成几个子问题,将其逐个求解。