截至2021年02月21日,一共写了PAT 20+25 道题,包括在牛客网写的几道真题,因为牛客有PAT报名的优惠券,而且评分体系也比较友好,用例错了都会有提示,方便纠错。
写了这么点题目最大的感受就是到后面题型就开始重复了,大致分为下面这几类:
- 图的最短路径
- 图的遍历
- 树的遍历
- 对输入的简单处理,例如字符串转换等
- 和时间有关的问题
- 跟进制有关的问题
- 排队问题
跟图有关的题目大多比较难,不过方法大多是用DFS或者Dijkstra,难点在于理解题目的含义。而后就是跟排队有关的,第一次遇到的时候这么多窗口确实有点不知所措,还有黄线,黄线内排队,以及这种问题的变体,核心思想还是抓住下一个窗口,怎么判断一个用户要进入的那个窗口非常重要!
其他的出现很多,但大多没有那么复杂,但是遇到了一些小技巧还是很需要记忆的!
int double float等等,整形转浮点数可以用x / 1.0
来实现,浮点数转整形直接用强制类型转换就OK,不过会损失精度,只保留正数?如果不放心可以用cmath
头文件中提供的ceil,floor
等方法来实现,如果需要四舍五入,那么可以用round
方法。
int,double等转为string都可以用C++提供的内置方法:to_string
,这个方法有很多的重写,一般来说是够用的,要注意,如果传给它一个char类型的值,那么这个函数会将其变为数字,而不是字符串!
string转为其他类型的值可以用内置的方法:stoi
等等,这种命名的方法用很多,慢慢找就能找到。
常用的地方是自定义sort函数,第三个形参可以传递一个匿名函数,用Lambda的形式:
[/* 引用在它之外声明的变量 */](data_type param1, data_type param2){
// 函数体
}
参数是两个遍历的容器中的数据,只需要返回一个bool值就行,用 <
就是升序,用 >
就是降序。还用一种自定义排序的方法就是在定义结构体的时候重载运算符:
struct node {
int value;
bool operator <(const node& n) const {
// 函数体,要求返回一个bool值
}
}
这样在用sort函数的时候就会自动使用这里重载的运算符!
字符串可以看作包装了原生的 char[] 类型,提供了更多方法,也可以直接像数组那样使用。不过像字符串按照separator分割的方法并没有直接提供,我们可以用原生的strtok来获取。
如果需要将char类型的字符转换为数字,可以用:tmp - '0'
,如果要将一位数字转为char类型的字符那么反过来运算即可,相对方便很多!
Type | Size | 数值范围 | 科学记数法 |
---|---|---|---|
无值型void | 0 byte | 无值域 | 0 |
布尔型bool | 1 byte | true false | 1 |
有符号短整型short [int] /signed short [int] | 2 byte | -32768~32767 | 10^5 |
无符号短整型unsigned short [int] | 2 byte | 0~65535 | 10^5 |
有符号整型int /signed [int] | 4 byte | -2147483648~2147483647 | 10^10 |
无符号整型unsigned [int] | 4 byte | 0~4294967295 | 10^10 |
有符号长整型long [int]/signed long [int] | 4 byte | -2147483648~2147483647 | 10^10 |
无符号长整型unsigned long [int] | 4 byte | 0~4294967295 | 10^10 |
long long | 8 byte | 0~18446744073709552000 | 10^20 |
有符号字符型char/signed char | 1 byte | -128~127 | 10^3 |
无符号字符型unsigned char | 1 byte | 0~255 | 10^3 |
宽字符型wchar_t (unsigned short.) | 2 byte | 0~65535 | 10^5 |
单精度浮点型float | 4 byte | -3.4E-38~3.4E+38 | 10^38 |
双精度浮点型double | 8 byte | 1.7E-308~1.7E+308 | 10^308 |
Reference: