标签:数组
题目:求解连续数列
已知连续正整数数列{K}=K1,K2,K3...Ki的各个数相加之和为S,i=N (0<S<100000, 0<N<100000), 求此数列K。
- 输入描述:
输入包含两个参数,1)连续正整数数列和S,2)数列里数的个数N。
- 输出描述:
如果有解输出数列K,如果无解输出-1
示例1
输入
525 6
输出
85 86 87 88 89 90
示例2
输入
3 5
输出
-1
题解
思路:
- 先对和S、个数N求平均数,可初步锁定连续正整数数列的范围在[平均数-N, 平均数+N]之间(实际上还可以再缩小一倍的遍历次数)
- 定义sum_temp()方法进行求和。依次从范围选择N个整数,判断和是否与S相等,不相等则继续后移N个数的索引位置
- 如果存在相等的整数组合,则返回正整数数列
- 如果找不到相等的整数组合,则返回-1
mport math
import sys
for line in sys.stdin:
sums = line.split()[0]
nums = line.split()[1]
# math.ceil()向下取整
end = math.ceil(int(sums)/int(nums))
start = end - int(nums)
max_num = end + int(nums)
def sum_temp(x, y):
z = 0
for i in range(x, y):
z = z + i
return z
while True:
temp = sum_temp(start, end)
if start < 0 or end >= max_num or temp > int(sums):
print(-1)
break
if temp == int(sums):
for num in range(start, end):
print(num, end=" ")
break
else:
start = start + 1
end = end + 1