0
length = 0
for n in range(1,101):
    print "Sequence #:", n
    while n != 1:
        print n,
        if n % 2 == 0:
           n = n / 2
           length = length + 1
        else:
            n = (n * 3) + 1
            length = length + 1
        if n == 1:
            print n
            length = length + 1
    print "The sequence above contains", length, "numbers"
    length = 0

我的问题:

上面的 python 代码计算数字 1 - 100 的冰雹序列,然后显示序列的长度。完成所有计算后,如何显示具有最长序列的数字及其对应的长度?

4

2 回答 2

0

只需保存每个输入的结果并最终查找最长的。

results = []
length = 0
for n in range(1,101):
    print "Sequence #:", n
    while n != 1:
        print n,
        if n % 2 == 0:
            n = n / 2
            length = length + 1
        else:
            n = (n * 3) + 1
            length = length + 1
        if n == 1:
            print n
            length = length + 1
    results.append((n,length))
    print "The sequence above contains", length, "numbers"
    length = 0
print 'Longest sequence of lenght {1} found for number {0}'.format(*max(results, key=lambda x: x[1]))
于 2012-08-03T20:30:53.393 回答
0

这将跟踪最大长度和序列并在最后显示它们。标有 a 的行##是对原始代码的补充。

length = 0
max_length = 0 ##

for n in range(1,101):
    print "Sequence #:", n
    seq = [] ##
    while n != 1:
        print n,
        seq.append(n)  ##
        if n % 2 == 0:
           n = n / 2
           length = length + 1
        else:
            n = (n * 3) + 1
            length = length + 1
        if n == 1:
            print n
            seq.append(n) ##
            length = length + 1
    print "The sequence above contains", length, "numbers"

    if length > max_length:  ##
        max_length = length  ##
        max_seq = seq[:]     ##

    length = 0

print 'max length: ', max_length ## same as len(max_seq)
print 'max seq: ', max_seq       ##
于 2012-08-03T20:31:57.073 回答