0

所以,我试着看看我是否可以编写代码来解决 Python 中的约瑟夫斯问题,供 n 人(在圆圈中)使用。

我是业余爱好者,请多多包涵。

这是我想出的代码,但它有一些问题。

n = input(int)

for i in range(0,10):
  if 2**i < n:
    print (2(n-(2**i))+1)

首先,它给出了一个 TypeError 并说在 'int' 和 'str' 的实例之间不支持 '<'。

其次,如果我更换

n = input(int)

n = 100

然后它给出 TypeError: 'int' object is not callable。

此外,考虑到我使用了一个奇怪的 for 循环并且它会为每个值返回解决方案,我似乎无法理解如何让程序返回 n = 100(即 73)的真正解决方案2^i 一直小于 n 直到 2^10

4

1 回答 1

0

您在打印行中缺少 *。它应该是

print(2*(n-(2**i))+1)

根据您的代码,您正在调用一些 2(something) ,其中 int 是不可调用的。您的解决方案也不完全正确。它不适用于完美的 2 次幂。

查看此链接以获取不同的方法和证明

于 2019-09-21T13:30:17.663 回答