PAT乙级练习

心血来潮报名pat。。据说含金量也就一般,但是我对自己属于相当没自信的那种,所以算是试试水吧。然后,再就是回忆回忆别荒废了就好。

乙级还是水题居多,但是对于我这种菜鸡来说还是有要吸取的地方的。

水题不赘述。

1001 考察条件语句if/else if 放在第一个真的是名副其实。

1002 水题加一,一年前的辣鸡代码都没一次过,当时写的代码真的又臭又长,现在的代码简洁好看多了。

1003 啊这个题,一年前直接没做,现在翻出来重新做了,还是很麻烦,主要是理解题意,判断什么是合格串,通过各种分析得出结论:串中有且仅有一个P一个T,可以有若干A但是要满足:P前面的A数量*PT中间A的数量=T后面A的数量 然后就不难做了,首先判断是否只有一个P和一个T,并记录位置,就可知道3种位置A的数量,最后判断乘积关系即可。

1004 水题加一 结构体排序 秒A

1005 有点小麻烦,是1001的升级版,要输出未被覆盖的数字,就给他未被覆盖的数字。从前往后运算,每计算一个数就把他后面运算到1所有经过的数字统统记录被覆盖,最后看谁没有被覆盖就输出(从大到小)坑点在格式上,还有数组大小容易开小,因为数据范围在100,虽然看上去只有×3不是很大,觉得1000怎么都够了,没想到最后要开到2500?(然后我试了3000就又不行了???5000也可以啊,这是什么神学范围题。。。)

1006 水题 比1001还。

1007 水题但是最后一个样例会卡时间。所以最后一个直接算出来然后如果数字大于99991就出1224(忽略不计的优化就是为了水过样例,正解应该是有更快的求素数的方法

比如:?

int prime[maxn], pNum = 0;
bool p[maxn] = {0};
void Find_Prime(int n) {
	if(n == 1) p[1] = true;
	for(int i = 2; i <= n; i++) {
		if(p[i] == false) {
			prime[pNum++] = i;
			for(int j = i + i; j < n; j +=i) {
				p[j] = true;
			}
		}
	}
}

哦 然后自己测试了一下自己原来的代码发现把PAT乙级练习_第1张图片改成PAT乙级练习_第2张图片。我其实当时只是偷懒了??(扶额.jpg,我是没想到 /2 和 sqrt(n) 的时间差这么多么?)

1008 水题怪自己没有脑子非要比较n和m的大小,直接把m变成m%n(此举m一定就比n小了)然后把原数列劈成两半分别输出即可。需控制下格式,还是很水。

1009 题不难,刚开始以为直接把一句话倒过来输出就行,发现并不,是单词内部顺序不变,但是每个单词出现的位置要颠倒过来。记录每个空格的位置,每两个空格之间就是一个单词,所以直接倒着输出每个单词即可。难点是怎么读入有空格的字符串。gets完全没有问题啊,但是就是编译不过我能怎么办。。。。没办法百度到一个新方法!记录一下!cin.get(数组名,数字)(这里是不是应该贴出原址传送门,我觉得他总结的不是很好,所以还是算了。。。有机会自己总结啊~ QAQ)

1010 啊这个题真的不难,但是把我难到怎么处理直接输入那么一长串数字然后再输出一长串。因为他输入的时候并没有给范围也就没有说什么时候停止,然而我也没有想到直接给一部分就算一部分,最后算到最后就行。。苦思冥想也没有出结果,一个不争气还是查了题解。。。然后恍然大悟,

1011 水题一个没注意格式PE一发,30秒发现并改正。。

1012 类似模拟?为啥我模拟了半小时还是错了最后一个样例,真的服了自己。然后进行搜索发现自己还是图省事,然后仔细重写发现问题所在,我默认这五种数字(也不是默认也推算了很久)都是不为0的,如果为0那么按照题意就是要输出N的,但其实并不是这样的,我另外设置了计数变量,在最后用计数变量判断是否输出N 就,,,过了!!!

然鹅错因就是太高估自己估算能力和判断能力,PAT乙级练习_第3张图片

不过我还是不服气就是这5种数字确实确确实实没有可以为0的啊。(懊恼!)

 

今日总结毕。

想起来南京行的总结写到一半没再写下去。

想起来看了两个电影都没写观后感。

想起来2019年已经快过了1/6 我年初立的flag差不多都要倒了。

想起来自己差的还很多。

长叹一口气,算了算了算了吧。

你可能感兴趣的:(PAT-c4练习集)