有一叠卡片,卡片号依次为1到n,并且所有卡片的正面朝上。从卡片号2开始,把凡是偶数的卡片都翻成正面朝下。再从3号卡片开始,把凡是卡片号为3的倍数的卡片都翻一面(即把正面朝上的翻成正面朝下,把正面朝下的翻成正面朝上)。下一步从4号卡片开始,把凡是卡片号为4的倍数的卡片都翻转一次,依次类推。问:最后哪些卡片朝上。C
时间: 2024-03-15 07:44:33 浏览: 86
卡片左右切换
这道题可以用模拟的方法解决。我们可以用一个数组 `cards` 来表示卡片的状态,其中 `cards[i]` 表示第 i 张卡片的状态,0 表示正面朝下,1 表示正面朝上。初始时,所有卡片的状态都是正面朝上。
接下来,我们依次模拟翻转卡片的过程。对于每次翻转,我们只需要遍历数组 `cards`,找到符合条件的卡片并将其状态翻转即可。最后遍历一遍数组,统计正面朝上的卡片编号即可。
下面是 Python 代码实现:
```python
n = 100 # 卡片总数
cards = [1] * (n + 1) # 初始化所有卡片正面朝上
# 依次模拟翻转卡片的过程
for i in range(2, n + 1):
if i % 2 == 0:
# 翻转偶数卡片
for j in range(i, n + 1, i):
cards[j] = 1 - cards[j]
else:
# 翻转第i个卡片
for j in range(i, n + 1, i):
cards[j] = 1 - cards[j]
# 统计正面朝上的卡片编号
ans = []
for i in range(1, n + 1):
if cards[i] == 1:
ans.append(i)
print(ans)
```
运行结果为:
```
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
```
因此,最后正面朝上的卡片编号为 1、4、9、16、25、36、49、64、81、100。
阅读全文