2013-10-10 39 views
-3
I want to generate a list from user entered number using Python 
I had tried it but I was unable to find out the proper solution for it. 

例如:如何使用python從用戶輸入的數字生成此列表?

如果用戶輸入2,然後列表應該[1,1]

如果用戶輸入11,則列表應該[1,2,3,4, 1]

如果用戶輸入12,則列表應該[1,2,3,4,2]

如果用戶輸入16,則列表應該[1,2,3,4,5, 1]

如果用戶輸入24,然後列表應該是[1,2,3,4,5,6,3]

規則:

  1. 列表中的所有號碼的總數應等於輸入號碼。
  2. 列表中的第一個數字是1
  3. 除了最後一個號碼,任意兩個元素之間的差異應該是1
  4. 尾號應等於輸入數 - 列表中的所有號碼的總和。
+2

什麼是返回的列表背後的邏輯? –

+0

這是一種...魔法模式? – alexvassel

+0

安裝具有通用差異1的AP,並在下一個值不合適時包括剩餘的數字。 – thefourtheye

回答

2
maxNum, current, result = 12, 1, [] 

while maxNum > current: 
    result.append(current) 
    maxNum -= current 
    current += 1 
result.append(maxNum) 
print result 

輸出

[1, 2, 3, 4, 2] 

編輯:

數學溶液:

inputNumber = int(raw_input("Please enter the input number: ")) 
a, b, c = 1, 1, -2 * inputNumber 
innerPart = ((b**2) - 4 * a * c)**0.5 
N = int(max((-b + innerPart)/(2 * a), (-b - innerPart)/(2 * a))) 
result, sumTillN = [i for i in range(1, N + 1)], (N * (N + 1)) // 2 
if inputNumber - sumTillN: result.append(inputNumber - sumTillN) 
print result 

可以使用N(N + 1)/ 2公式計算第N-1個元素。我們可以找到正數爲N^2+N-2*inputNumber,填寫第一個N - 1元素。最後一個元素就是剩下的部分。

+0

@ user2083375你介意解釋什麼是錯的? – thefourtheye

+0

沒有什麼不對。你的代碼是正確的.. –

+0

@RiturajRamteke如果你覺得我的回答對你有幫助,你可以[接受我的回答](http://meta.stackexchange.com/a/5235/204922):-) – thefourtheye

相關問題