第一次参加PAT比赛,为了先测试自己编程基础知识的掌握程度,报名了2022秋的乙级考试,在赛前也略微做了一些往年真题和PAT官网的练习题,题目链接:PAT 计算机程序设计能力测试 (patest.cn)。
整体来说,五道编程题给3个半小时的时间是非常足够的,前四道题没有太多难度,基本上做完还有两个小时左右来做最后一道题,因为这个比赛是可以现场AC的,也有实时排名,因此我能够看到在前四题全部AC的情况下我的实时排名为考场第三(一个考场三百人左右),但是最后一题始终因为部分样例超时,没能够拿到满分,属实遗憾。
就含金量来说,PAT的乙级是最基本的,刚学完c语言的同学就可以尝试参加,但由于数据结构和其他经典算法基本不考,最难只考排序的情况下,不建议在乙级上停留太多时间。而我最后没能AC是因为一个最经典的问题:c++的输入输出流要比c语言的耗时更多。
最后再谈一谈本人参加PAT的理由:首先最重要的就是测试和提高自己编程能力,然后本人在学校里也不属于全能大佬(各科分数都极高),指望不上保研,因此参加一系列赛事可以让自己的简历上有东西可写,另外如果考研也能在复试上取得一些优势。另外推荐B站编程算法学习宝藏up:趣学算法 趣学算法的个人空间_哔哩哔哩_bilibili
满分源码:
//1
#include
#include
#include
using namespace std;
int main() {
int a0, n,a1,a2;
cin >> a0 >> n;
a1 = a0;
for (int i = 1; i <= n; i++) {
a2 = a1 * a1 * a1 + 1;
int s = 0;
do {
s += a2 % 10;
a2 /= 10;
} while (a2 >= 10);
s += a2;
a1 = s;
}
cout << a1;
return 0;
}
//2
#include
#include
#include
using namespace std;
int num[10005] = { 0 };
int find(int i, int n);
int main() {
int m, k, n = 0,j=0;
cin >> m >> k;
//num[0] = 0;
for(int i=1;i<=m;i++){
char s;
cin >> s;
if (s == 'B') {
j = j * 8 + 1;
if (find(i, j)&&j
//3
#include
#include
#include
using namespace std;
typedef struct N {
string name;
int value;
}object[10005];
object o;
int main() {
int n, a, b;
int m = 0,v=-1,v1=1e9,v2=-1;
cin >> n >> a >> b;
for (int i = 1; i <= n; i++) {
cin >> o[i].name >> o[i].value;
}
for (int i = 1; i <= n; i++) {
if (o[i].value > v2)v2 = o[i].value;
if (o[i].value < v1)v1 = o[i].value;
if (o[i].value >= a && o[i].value <= b) {
m++;
if (o[i].value > v)v = o[i].value;
}
}
if (m != 0) {
cout << m << " " << v << endl;
for (int i = 1; i <= n; i++) {
if (o[i].value == v)cout << o[i].name << endl;
}
}
else cout << v1 << " " << v2;
return 0;
}
//4
#include
#include
#include
using namespace std;
int num[100005];
int ball[100005];
int n, l;
int find(int i);
int main() {
cin >> n >> l;
int loc = 1e9,m=0;
for (int i = 1; i <= n; i++) {
cin >> num[i];
}
for (int i = n; i >= 1; i--) {
ball[i] = find(i);
if (ball[i] > m)m = ball[i];
}
for (int i = 1; i <= n; i++) {
if (ball[i] == m) {
loc = i;
break;
}
}
cout << num[loc] - l << " " << m;
return 0;
}
int find(int i) {
int m = 0;
for (int j = i; num[j] >= num[i] - l&&j>0; j--) {
m++;
}
return m;
}
//5
#include
#include
#include
using namespace std;
int a[100005];
int man[100005];
int findmain(int min, int max);
int main() {
int k;
cin >> k;
while (k--) {
int n;
int r = 3;
bool t = false;
cin >> n;
for (int i = 1; i <= n; i++) {
scanf_s("%d", &a[i]);
}
int l = findmain(1, n);
for (int i = 0; i < l; i++) {
if (man[i] == 1 || man[i] == n)r = 2;
}
if (l < r)printf("NO\n");
else printf("Yes\n");
}
return 0;
}
int findmain(int min,int max) {
int k = 0;
for (int m = min; m <= max; m++) {
int n = a[m];
int t = 1;
for (int i = min; i < m; i++) {
if (a[i] > n)t = 0;
}
for (int i = m + 1; i <= max; i++) {
if (a[i] < n)t = 0;
}
if (t)man[k++]=m;
}
return k;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)