题目:
代码
"""
题目分析:
一个整数
连续的自然数之和表示(非负整数)
输入:
一个整数T[1,1000]
输出:
输出多个表达式,自然数个数最少优先输出
最后一行, 输出“Result : 个数”
思路:
循环+逻辑判断处理(关键点,连续的自然数)
1=1
2=2
3=3
3=1+2
4=4
5=5
5=2+3
6=6
6=1+2+3
t = a + (a+1) + ... + a(n-1)=na + n(n-1)/2
a = (t-n(n-1)/2)/n
分析,这里的n不可能大于t/2, 如果大于,则不可能出现新的解
"""
# import math
# t = 5
# # 单独判断1和2
# if t in [1, 2]:
# print(f"{t}={t}")
# print(f"Result: 1")
# temp_list = list()
# for i in range(1, math.ceil(t/2)):
# a = (t-i*(i-1)//2)//i
# # 添加a 大于0
# if a > 0 and t == i*a + i*(i-1)/2:
# temp_list.append([i, a])
# # print(temp_list)
# for j in temp_list:
# if j[0] == 1:
# print(f"{t}={t}")
# else:
# temp = list(range(j[1], j[1]+j[0], 1))
# print(f"{t}=" + "+".join(map(str, temp)))
# if t >2:
# print(f"Result: {len(temp_list)}")
# 优化
import math
t = 9
# 单独判断1和2
if t in [1, 2]:
print(f"{t}={t}")
print(f"Result: 1")
temp_list = list()
for i in range(1, math.ceil(t/2)):
a = (t-i*(i-1)//2)//i
# 添加a 大于0, 否则会有负数的可能(t=1000时)
if a > 0 and t == i*a + i*(i-1)/2:
temp_list.append([a+z for z in range(i)])
# print(temp_list)
for j in temp_list:
print(f"{t}=" + "+".join(map(str, j)))
if t >2 :
print(f"Result: {len(temp_list)}")