题目:用连续自然数之和来表达整数
一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。
输入描述:
一个目标整数T (1 <=T<= 1000)
输出描述:
该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为:
1.自然数个数最少的表达式优先输出
2.每个表达式中按自然数递增的顺序输出,具体的格式参见样例。在每个测试数据结束时,输出一行”Result:X”,其中X是最终的表达式个数。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
复制
9
输出
复制
9=9 9=4+5 9=2+3+4 Result:3
说明
整数 9 有三种表示方法,第1个表达式只有1个自然数,最先输出,第2个表达式有2个自然数,第2次序输出,第3个表达式有3个自然数,最后输出。每个表达式中的自然数都是按递增次序输出的。 数字与符号之间无空格
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
复制
10
输出
复制
10=10 10=1+2+3+4 Result:2
def calc_number(tmp_list):
j = 1
tmp_val = (j + 1) * (2 * i + j) // 2
while tmp_val <= number:
if tmp_val == number:
for k in range(j):
tmp_list.append(i + k)
tmp_list.append(i + j)
num_ret_list.append(tmp_list)
j += 1
tmp_val = (j + 1) * (2 * i + j) // 2
return tmp_list
if __name__ == '__main__':
number = int(input())
num_ret_list = [[number]]
for i in range(1, number):
num_list = calc_number([])
num_ret_list.sort(key=lambda a: len(a))
ret = ''
for ret_list in num_ret_list:
ret += f"{number}={'+'.join(str(val) for val in ret_list)}" + "\n"
ret += f"Result:{len(num_ret_list)}"
print(ret, end="")