50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少(简单易懂)


该题目的圈的元素个数是50个,每次数到3或3的倍数的时候,就把当前元素出圈,并且继续数数(假设删掉的是6的那个数字,那么下一个叫7而不是叫6)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 假设一开始有n个人,按照题目要求进行报数和退操作,直到只剩下一个人为止。由于每报数到3就退一个人,所以第一个退的人的编号是3。而之后每次退的人的编号都会向后移动3位,因为每隔3个人就会有一个人退,所以最后留下来的那个人的编号应该是从1开始逆推的,即为: $$f(n) = (f(n-1) + 3) \ \text{mod} \ n $$ 其中,f(n)表示最后留下来的人的编号,mod表示取模运算。由于是递归计算,需要有一个初始值f(1)=0。 例如,当n=6,计算过程如下: $f(1) = 0$ $f(2) = (f(1) + 3) \ \text{mod} \ 2 = 1$ $f(3) = (f(2) + 3) \ \text{mod} \ 3 = 1$ $f(4) = (f(3) + 3) \ \text{mod} \ 4 = 3$ $f(5) = (f(4) + 3) \ \text{mod} \ 5 = 0$ $f(6) = (f(5) + 3) \ \text{mod} \ 6 = 3$ 因此,当n=6,最后留下来的人的编号是3。 ### 回答2: 假设有n人一圈,顺序排号,我们可以通过模拟这个过程来找到最后留下的人的编号。 首先,我们将所有人的编号保存到一个列表中,设为people_list。接下来,我们创建一个pos变量,表示当前报数的人的位置,初始为0(第一个人)。 然后,我们使用一个循环来模拟报数的过程,直到有n-1人退圈子为止。在每一轮循环中,我们通过pos变量找到当前报数的人,并进行相应的操作。如果该人的编号是3的倍数,我们从people_list中删除该人,并将n减1;否则,我们将pos加1,表示报数下一个人。 当循环结束,最后留下的人的位置即为0,我们可以通过people_list[0]来获取该人的编号。 以下是根据上述思路编写的Python代码: ```python def find_last_person(n): people_list = list(range(1, n+1)) pos = 0 while len(people_list) > 1: if (pos + 1) % 3 == 0: people_list.pop(pos) n -= 1 else: pos = (pos + 1) % n return people_list[0] n = int(input("请输入总人数:")) last_person = find_last_person(n) print("最后留下的是原来的第{}号的人。".format(last_person)) ``` 通过该代码,我们可以输入总人数n,然后输最后留下的人的原始编号。 ### 回答3: 这个题可以用数学归纳法进行推导。 假设当一圈的人数为1,只有一个人,那么这个人自然是最后留下来的,即第1号。 当一圈的人数为2,两个人分别记为1号和2号。按照规则报数,第1号报到3后退圈子,剩下的只有2号。所以最后留下来的是原来的第2号。 当一圈的人数为3,三个人分别记为1号、2号和3号。按照规则报数,第1号报到3后退圈子,剩下的顺序为2号和3号。然后从2号开始继续报数,2号报到3后退圈子,最后只剩下3号。所以最后留下来的是原来的第3号。 根据以上推理,可以得以下结论: 当一圈的人数为n,最后留下来的人的编号可以根据(n-1)人的情况进行推导。我们可以将n个人的编号从1到n排列,然后依次剔除报到3的人,直到只剩下1个人。假设最后剩下的人的编号为x,则可以根据(n-1)人的情况递推得到x。具体递推公式为: x = (x' + 2) % n + 1 其中x'为(n-1)个人情况下剩下的人的编号。 所以对于n个人一圈的情况,最后留下来的人的编号可以通过递推公式得到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值