2012-08-03 17 views
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並隨後顯示該序列的長度。在完成所有計算後,如何顯示最長序列號及其相應長度?冰雹序列在Python

+0

一個側面說明...你一定要明白在for循環n的值不會改變,當你做'N = whatever'(雖然n表示while循環的值改變了)吧? – 2012-08-03 20:27:46

+0

這是功課嗎? – Spaceghost 2012-08-03 20:28:15

+0

添加兩個變量,一個用於當前候選人,另一個用於相關序列長度。弄清細節。 – 2012-08-03 20:30:04

回答

0

這將記錄最大長度和順序,並在最後顯示它們。標有##的行是對原始代碼的補充。

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  ## 
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]))