321
社区成员




某监狱有一个由n个牢房组成的大厅,每个牢房紧挨着。每个牢房里都有一个囚犯,每个牢房都是锁着的。 一天晚上,狱卒感到无聊,决定玩一个游戏。在第一轮,他喝了一杯威士忌,然后跑下大厅,打开每个牢房的锁。在第二轮比赛中,他喝了一杯威士忌,然后跑下大厅,锁上每隔一个的牢房的锁(牢房2、4、6....)。在第三轮比赛中,他喝了一杯威士忌,然后跑下大厅。他每隔三个牢房(第3、6、9号牢房)就去一次。如果牢房被锁上了,他就把它打开;如果牢房门打开了,他就锁上牢房。他重复n轮,喝最后一杯,然后昏倒。 一些囚犯(可能为零号)意识到他们的牢房被解锁且狱卒丧失了行动能力。他们就可以立即逃跑。现在根据牢房数量,确定有多少囚犯越狱。
嗯,这个题,老顾一直错一直错,今天碰到了,才仔细研究了一下,n 个门,编号从1到 n,不是从0 到 n - 1, 也就是说,第一个门打开后,再也关不上了
列个数据就知道了,假设5个门
0 0 0 0 0 初始
1 1 1 1 1 第一轮
1 0 1 0 1 第二轮
1 0 0 0 1 第三轮
1 0 0 1 1 第四轮
1 0 0 1 0 第五轮
老顾以前一直认为第一个门,编号是0,所以第一个门每次都需要开或关。。。所以一直错,为什么会有这个理解问题呢?看看题目:一些囚犯(可能为零号)。。。。杀了出题的人祭天吧。
l = int(input())
t = []
for i in range(l):
n = int(input())
z = [0 for _ in range(n + 1)]
for i in range(n):
z = [(v + 1) % 2 if j % (i + 1) == 0 else v for j,v in enumerate(z)]
t.append(z[1:].count(1))
print(*t,sep = '\n')
根据问哥的题解,得到一个简单的推导式
n = int(input())
print(*[int(int(input()) ** .5) for _ in range(n)],sep='\n')