7-37 整數分解為若干項之和 (20分)(Python實現,遞迴)
阿新 • • 發佈:2021-01-08
題目
將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。
輸入格式:
每個輸入包含一個測試用例,即正整數N (0<N≤30)。
輸出格式:
輸入樣例:
7
輸出樣例:
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7
tips:重複的進行最後兩個元素求和,判斷求和後的值是否可拆分
count = 0
import sys
sys.setrecursionlimit(1000000)
def outPut(data):
global count
if count % 4 == 0 and count != 0:
print()
elif count != 0:
print(";", end='')
string = str(data).strip().replace('[', '').replace(']', '').replace(', ', '+')
print("{}={}" .format(N, string), end='')
count += 1
pass
def calculate(data):
while len(data) >= 2:
last = data[-1] + data[-2]
V = data[-2] + 1
data = data[:-2]
maxV = last // 2
while V <= maxV and last // V > 1:
data1 = data[::]
lastTemp = last
while lastTemp // V > 1:
data1.append(V)
lastTemp = lastTemp - V
else:
data1.append(lastTemp)
V += 1
# print("data1", data1)
outPut(data1)
calculate(data1)
return
data.append(last)
# print(data)
outPut(data)
pass
if __name__ == "__main__":
N = int(input())
dataL = [1] * N
outPut(dataL)
calculate(dataL)
# while len(data) >= 2:
# last = data[-1] + data[-2]
# V = data[-2] + 1
# data = data[:-2]
# maxV = last // 2
#
# while V <= maxV and last // V > 1:
# data1 = data[::]
# lastTemp = last
# while lastTemp // V > 1:
# data1.append(V)
# lastTemp = lastTemp - V
# else:
# data1.append(lastTemp)
# V += 1
# print("data1", data1)
#
# data.append(last)
# print(data)
pass