解约瑟夫问题(及求解规律)(Python)

本文介绍了如何使用Python代码解决约瑟夫问题,通过列举实例展示了当删除元素报数为2时,剩余元素呈现的规律,以及如何扩展到其他报数情况。
摘要由CSDN通过智能技术生成

        顺承24年春晚刘谦的魔术(可选择是否明牌)

        下面的代码是运用列表来解决约瑟夫问题。

        在下面的这个代码中你可以输入两个数,例如100与2,那么他就会使得元素总数从1循环到100,将“报数”为2的元素删除来作为条件,解决约瑟夫问题。

        从给出的数字里面,我们其实是可以看到约瑟夫问题的一些规律,下面给出一段结果(以127和2为参数)

1

1 3

1 3 5 7

1 3 5 7 9 11 13 15

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127

        以上是完整的几组结果,当输入为128和2是则输出又重新变为了1(是新的一组的开始)

我们可以从中看到一些规律

这几组数列都是以1开头的奇数列(2为公差)

1=0*2+1

3=1*2+1

7=3*2+1

15=7*2+1

31=15*2+1

63=31*2+1

127=63*2+1

...

        由此我们便找到了当删除元素的报数为2时,最后的剩余元素的规律。

        同理,利用此程序我们也可以很方便地找到当删除元素报数为其他的数时得到的剩余元素的规律。

        事实上,这个规律(当删除元素的报数为2)较为简单易发现,其他的似乎有点不容易总结,我也没有细看,所以有明白的,懂的,能总结的欢迎评论留言。

"""约瑟夫问题"""
m=int(input("To observe a situation containing several elements:"))
which_num=int(input("Enter the number of the element to be eliminated:"))
elements=[]
for all_num in range(1,m+1):
    for i in range(all_num):
        elements.append(i+1)
    n=0
    print(elements)
    while len(elements)>1:
        for i in range(which_num-1):
            n+=1
            if n==len(elements):
                n=0
        del elements[n]
        if n==len(elements):
            n=0
    print(elements[0])
    elements=[]
  • 22
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值