-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.

例如:

如果用户输入 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. 最后一个数字应该等于输入数字 - 列表中所有数字的总和。
4

1 回答 1

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 个元素。我们可以找到正 NN^2+N-2*inputNumber并填充前 N - 1 个元素。最后一个元素就是余数。

于 2013-10-10T06:30:05.223 回答