上周五参加了蓝桥杯的校内选拔,给虐的惨目忍睹。
啪的一下很快啊,欺负我这个大三的老同志/(ㄒoㄒ)/~
这次我选的是python组,有点后悔没选C/C++, python一上来就图论就离谱😟
试卷就没有了,仅写一下当时考试时脑子短路没想到的几道题

第一题-细胞分裂

题目描述:现在有一个细胞,每一个小时分裂一次,第三个小时时细胞自然死亡
问:第N个小时后还有几个细胞存活

输入:
5
输出:
24

这道题看上去就想斐波那契数列的变形,考场上第一想法就是用数组来解但一直解决不了细胞死亡问题导致第一道程序设计题就卡壳了。
最气的是一出考场就想到了解法….我….
题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n = int(input())

temp_list = [
{"old": 1,"new": 0, "all": 1},
{"old": 1,"new": 1, "all": 2},
{"old": 2,"new": 2, "all": 4},
]

for i in range(2, n):
old = temp_list[-1]["all"]
die = temp_list[-3]["old"]
temp_dict = {
"old": old,
"new": old,
"all": old * 2 - die
}
temp_list.append(temp_dict)

print(temp_list[-1]["all"])

第二题-猴子选大王

题目描述:一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:
输入在一行中给一个正整数N(≤1000)。
example:

11

输出格式:
在一行中输出当选猴王的编号。
example:

7

题解:

1
2
3
4
5
6
7
8
9
10
11
n = int(input())
temp_list = list(range(n))
target = 1
while len(temp_list) > 1:
for value in temp_list[:]:
if target == 3:
temp_list.remove(value)
target = 0
target += 1

print(temp_list[-1] + 1)

总结

很多题目以前都在PTA上自己解答过,但一上考场就凉了,还是自己太菜了~