连续正整数的和
【问题描述】
对于一个正整数x(3≤x≤1000),寻找一种方案,将x分解成连续正整数的和。即
x=x1+x2+…+xn
其中x1、x2、…、xn是自小至大的连续正整数,且n>1。
比如,对于输入的数字10,可以分解成"10=1+2+3+4"。
如果存在多于一种的可行方案,则选取等式右边项的个数最多的那一种。比如,9可以分解为"9=2+3+4",也可以分解为"9=4+5"。但是前一种分解成3个数的和,后一种分解成2个数的和,所以前一种是有效解。
【输入文件】
输入文件为当前目录下的scpi.in,该文件只含有一个正整数x。
【输出文件】
输出文件为当前目录下的scpi.out。
如果x可以分解为连续正整数的和,则按如下格式输出一行等式:
x=x1+x2+…+xn
如果无法分解,则打印"x:NOANSWER"。
【样例输入1】
38
【样例输出1】
38=8+9+10+11
【样例输入2】
256
【样例输出2】
256:NOANSWER
【样例说明】样例1说明38可以分解为连续正整数8,9,10,11的和,而256则不能分解为连续正整数的和
def output(m, n):g.write(str(x))g.write('=')for i in range(m, n + 1):g.write(str(i))if i < n: # 判断是否输入 +g.write('+')f = open('scpi.in') # 打开文件
x = int(f.readline()) # 读取文件第一行
flag = 0 # 表及存在不存在
g = open('scpi.out', 'a') # 打开文件
g.seek(0) # 定位位置
g.truncate() # 从定位开始清空
list_i = []
list_j = []
for i in range(x):sm = 0 # 和for j in range(i, x):sm += j # 求和if sm == x:flag = 1list_i.append(i)list_j.append(j)break # 退出循环
if flag == 0: # 不存在时g.write(str(x))g.write(':NOANSWER')
else:list_result = [] # 最大值for i in range(len(list_i)): # 求差值储存在新列表中list_result.append(list_j[i] - list_i[i])t = max(list_result) # 求差值最大值for i in range(len(list_i)): # 获取最大值所在位置if t == list_result[i]:output(list_i[i], list_j[i]) # 调用函数写入文件
f.close()
g.close()
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
