题目描述
已知连续正整数数列{K}=K1,K2,K3… Ki的各个数相加之和为S, i = N (0 < S < 100000, 0 < N < 100000), 求此数列K。
输入描述
输入包含两个参数
-
连续正整数序列之和为S
-
数列里数的个数为N。
输出描述
如果有解就输出数列K,如果无解就输出-1
实现脚本
# 提示用户输入连续的正整数
S = None
N = None
try:
S = int(input("请输入连续正整数之和:"))
N = int(input("请输入连续正整数的个数:"))
except ValueError as e:
print("你输入的不是数字,请输入正整数...")
# 判断输入的两个参数是否满足要求
if S>100000 or S<=0 or N<=0 or N>=100000:
print("输入参数超出限制,请重新执行输入...")
res = []
'''
连续整数之和可以看做是n + (n+1) + (n+2) + ... +(n + N-1)之和,分成n * N + sum(range(1,N))之和
所以根据如上公式去求第一个数,判断第一个数的int和直接得到的第一个数(不做转换)是否相等来判断是否存在连续数列
'''
tmp_sum = sum(range(1,N))
tmp = (S - tmp_sum) / N
if tmp == int(tmp):
for i in range(N):
res.append(int(tmp))
tmp += 1
print(res)
else:
print(-1)
输出结果
请输入连续正整数之和:525 请输入连续正整数的个数:6 [85, 86, 87, 88, 89, 90] 请输入连续正整数之和:100 请输入连续正整数的个数:5 [18, 19, 20, 21, 22] 请输入连续正整数之和:100 请输入连续正整数的个数:3 -1