首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >负计数约瑟夫斯问题的解

负计数约瑟夫斯问题的解
EN

Stack Overflow用户
提问于 2021-10-18 12:47:21
回答 1查看 99关注 0票数 0

我想找出一般约瑟夫斯问题最简单的算法,也就是任意方向的计数。

将组合的“递归列表”算法作为基础(Python)。

它对积极的转变很有效,从消极开始很好,但后来出了问题。

代码语言:javascript
复制
def add(x):
    if x >= 0:
        return 1
    return -1


def josephus(arr, start, shift):
    if len(arr) == 1:
        return arr
    else:
        start = (start + shift - add(shift)) % len(arr)
        arr.pop(start)
        print(arr)
        return josephus(arr, start, shift)

size = int(input())
people = list(range(1, size + 1))
start = int(input()) - 1
shift = int(input())
print(people)
josephus(people, start, shift)

添加几个"if“语句可能会有所帮助,但我不想这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-18 13:28:16

负值行为不同的原因是,在执行arr.pop(start)之后,start索引(模块化新大小)的值将始终是“顺时针”(右)方向上的下一个元素。

当转移为负值时,应反映这一效果。

因此,当shift为负值时,在执行pop后从start中减去一个

代码语言:javascript
复制
    arr.pop(start)
    if shift < 0: 
        start -= 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69616351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档