劝退专业第一次PAT甲级(2020年冬季)考试经验
自我介绍
生化环材一员,刚读研究生就发现自己不适合科研,2019年10月开始学习Python,疫情在家开始学习数据结构和算法,一开始全部都不懂,链表都是自己在b站看了好多视频才看懂,后来一次偶然的机会,找背包问题的视频的时候看到了y总的背包九讲,于是了解了acwing,往后,一直在acwing学习,开始学着用C++去写算法题,C++写算法题速度比较快,因此后面才学着写C++,2020年冬季第一次参与甲级考试,考试成绩93分,第一次考试我还是相对满意的。
第一题 The Closest Fibonacci Number
第一题很简单,看到题目后基本就知道怎么做,题目的意思是给一个数给你,让你找斐波那契数列中和这个数字最相近的数字,如果有两个数一样相近,则输出一个比较小的数字。这个题目直接写出斐波那契数列就好了。
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
int n;
vector<int> map;
int main()
{
cin >> n;
map.push_back(0); // 给数组中赋初始值
map.push_back(1);
while ( map[map.size() - 1] < n) // 当数组中的最后一个数都比给定数字小的话,就继续往数组中加数组
{
int u = map.size() - 1;
map.push_back(map[u] + map[u - 1]);
}
int u = map.size() - 1;
if ( abs(map[u - 1] - n) <= abs(map[u] - n)) cout << map[u - 1] << endl;
else cout << map[u] << endl;
return 0;
}
第二题 Subsequence in Substring
第二题也是比较简单的题目,题目的意思是给两个字符串,第一个是模板字符串(A),第二个是要找的字符串(B),你需要输出最短的包括字符串B的子串。这个题目一开始我以为要用KMP算法,内心还慌了一下,以为用暴力搜索肯定会超时,结果发现并没有。最后考试的时候就是用了两个指针去循环。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string a, b;
int main()
{
cin >> a >> b;
string res;
if ( a == b) // 特殊判断,有个测试点,1分
{
cout << a << endl;
return 0;
}
for ( int i = 0; i < a.size() - b.size(); i ++) //定义两个指针
{
int j = 0;
if ( a[i] != b[j]) continue; // 如果第一个初始字符都不符合,则下一个循环
else
{
int k = i; // 第一个字符符合
while ( k < a.size() && j < b.size())
{
if ( a[k] == b[j