2022秋PAT乙级总结+c语言代码

        第一次参加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;
}

你可能感兴趣的:(c语言,c++,pat考试)