一群渔民被海盗抓住了,依次坐在编号为1~n的凳子上,其中有一个人身上有藏宝图。现在海盗想要找那个身上带着宝藏的渔民,海盗先将1号凳子上面的人搜身,没找到就隔1个凳子,将3号凳子上面的人搜身,没找到就隔2个凳子,将6号凳子上面的人搜身。以后每次多隔一个凳子去搜索……这样下去找了100次没找到,最终放弃了把渔民释放了。任意输入一个数字n(5<=n<=20)代表渔民的数量,依次输出哪些编号的渔民不会被搜身 注意:input()内不添加任何参数 只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改 【输入样例】 10 【输出样例】 2 4 7 9
时间: 2024-03-24 13:35:42 浏览: 303
队列(假设n个人编号1..n,他们按编号顺时针站成一圈)如n=5,m=3。1 2 3 4 5,最终输出是3 1 5 2 4。
5星 · 资源好评率100%
这道题可以使用模拟的方法来解决。我们可以用一个数组来表示每个渔民是否被搜身,初始值都为0,表示没有被搜身。然后按照题目要求,依次隔1、2、3、...个凳子去搜索,每次将被搜身的渔民的状态设为1。最后输出状态为0的渔民的编号即可。
以下是Python代码实现:
```python
n = int(input())
searched = [0] * n # 表示每个渔民是否被搜身,0表示没有被搜身
step = 1
while True:
found = False # 标记是否找到了藏宝图的渔民
for i in range(0, n, step):
if searched[i] == 0:
searched[i] = 1 # 将该渔民标记为已被搜身
if i == 0: # 1号凳子上的渔民被搜身了,判断是否为藏宝图的渔民
found = True
break
if i == n - 1: # 已经搜到了最后一个渔民,退出循环
break
if found:
break
step += 1
if step > n: # 已经隔了n个凳子了,重新从1开始隔
step = 1
# 输出状态为0的渔民的编号
for i in range(n):
if searched[i] == 0:
print(i + 1, end=' ')
```
代码中,我们先用`searched`数组来表示每个渔民是否被搜身,初始值都为0,表示没有被搜身。然后按照题目要求,依次隔1、2、3、...个凳子去搜索。如果搜到了藏宝图的渔民,就退出循环。最后,我们将状态为0的渔民的编号输出即可。
阅读全文