【问题标题】:Simulating Fibonacci's Rabbits with multiple offsprings using python使用 python 模拟具有多个后代的斐波那契兔子
【发布时间】:2015-06-17 15:25:21
【问题描述】:

假设我从一对兔子开始,每对复制 3 对兔子。 设新兔对为N,成熟兔对为M

 N    0 
 M    1
MNNN  4
MNNN MMM MMM MMM 19 

所以系列是0 1 4 19

我们如何在 Python 上使用循环来做到这一点:

我试过了:

x="N" #new rabbit pair
x=x.replace("N","M")
x
'M' #Mature rabbit pair
x=x.replace("M","MNNN")
x
'MNNN'
x=x.replace("M","MN")
x=x.replace("N","M")
x
'MNNNMMM'

如何使用 xrange/range 函数将其放入循环中。

谢谢

【问题讨论】:

  • 你确定吗?我希望第 4 步是 'MNNNMMM'

标签: python python-2.7 dynamic-programming


【解决方案1】:

一个步骤的过程是将所有'M's替换为'MNNN',将所有'N's替换为'M',所以:

def step(state):
    return ''.join(['MNNN' if s == 'M' else 'M' for s in state])

例如:

>>> s = 'N'
>>> for _ in range(5):
    print s, len(s)
    s = step(s)


N 1
M 1
MNNN 4
MNNNMMM 7
MNNNMMMMNNNMNNNMNNN 19

【讨论】:

  • 谢谢@Jonrsharpe...这个方法很快:)
【解决方案2】:

你可以试试这样的 -

mature = 'M'
kid = 'N'
start = 'N'
for i in range(10):
    ms = start.count(mature)
    start = start.replace(kid ,mature)
    start = start + kid * (ms * 3)
    print(start)

对于性能和内存使用 - 您可以使用 -

mature = 'M'
kid = 'N'
start = (0,1)
print(mature * start[0] + kid * start[1])
for i in range(10):
    newmature = start[1] 
    newkid = start[0] * 3
    start = (start[0] + newmature , start[1] + newkid - newmature)
    print(mature * start[0] + kid * start[1] + " - " + str(start[0] + start[1]))

【讨论】:

  • 我建议您一般也接受答案,而不仅仅是这个问题,这将保持社区的积极性,并且将来来看这个问题的任何其他人都会知道去哪里寻找答案。
  • 你为什么要分配 maturekid,然后不使用?这并不能维持秩序,尽管这可能并不重要。
  • 哦,对不起,我打算用它来代替 'M' 和 'N' ,这样如果将来替换它们,它很容易替换。
  • 如果你增加迭代,它会很慢。有没有更快的方法,因为它消耗太多内存?
  • 关于内存,这只会存储一个额外的'M'和'N'字符串,这应该比所需的内存量最多4个字节,如果你想你可以考虑一个方法你根本没有在内存中存储任何东西。让我弥补并更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
相关资源
最近更新 更多