1. 程式人生 > 其它 >7-37 整數分解為若干項之和 (20分)(Python實現,遞迴)

7-37 整數分解為若干項之和 (20分)(Python實現,遞迴)

技術標籤:程式設計演算法python

題目

將一個正整數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