我正在研究 Code Abbey 问题 23,Neumann 的随机生成器。目标是使用给定的算法从列表中的每个值生成一系列随机数,并继续直到算法生成与我们开始时相同的数字。然后,打印到达循环所需的遍数。我似乎无法让我的代码工作;我很确定这与 while 循环有关。我将不胜感激任何帮助,更重要的是,我做错了什么的解释。
这是我的代码:
cases = int(input())
values = [int(x) for x in input().split()]
def random_number(values):
for value in values:
random = pow(value, 2)
passes = 0
equal = False
while not equal:
if len(str(random)) < 8:
random = int(str(random).zfill(8))
random = (random // 100) % 10000
passes += 1
if random == value:
equal = True
else:
random = pow(random, 2)
print(passes, end=' ')
random_number(values)
这是我的输入:
12
6239 8935 4715 8785 9737 9251 3251 3544 9631 4655 903 7589
问题:中间方 block 方法并不总是返回到起始种子,但这是您测试的唯一结果。该序列可以返回一些已经访问过的数字而不是种子,在这种情况下 random
永远不会等于 value
,并且您的程序将不会检测到重复。 (为了快速演示这一点,请尝试使用起始值 12 手动执行算法 - 您会发现它开始非常快速地重复,但再也不会访问 12)。
解决方案: 不是仅仅存储原始值并将 random
与其进行比较,您需要存储到目前为止访问过的每个值的列表,并在 时终止>随机
出现在该列表中的任何位置。
我是一名优秀的程序员,十分优秀!