日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python分割数字_python实现整数拆分,输出拆分序列

發布時間:2025/3/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python分割数字_python实现整数拆分,输出拆分序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

昨天筆試VIPKID有一道關于整數拆分的題目,要求輸出拆分后的序列,當時沒有做出來,記錄一下可以實現的想法:

題目示例:

從鍵盤讀入一個數 n, 輸出所有和為 n 的子序列和,包括 n

測試用例:

輸入 5

輸出:

1 + 1 + 1 + 1 + 1

1 + 1 + 1 + 2

1 + 1 + 3

1 + 2 + 2

1 + 4

2 + 3

5

解題思路:首先這類需要不斷分解的題目,首先想到的是遞歸法,也就是說將一個大數不斷的分解為小數,然后將每一個分解的子數保存在一個 list 中,退出條件為當 n 的值減為 0,然后輸出 list 中的值。

def resolve(n, minFlag):

global resCnt

global resList

global p

if n == 0:

resCnt += 1

for i in range(p):

print(resList[i], end="")

if i == p-1: # 當輸出到最后一個數字時,不輸出 '+'

continue

else:

print("+", end="")

print("")# 輸出list中的值以后,換行

for i in range(minFlag, n+1):

resList[p] = i

p += 1

resolve(n-i, i)

p -= 1

if __name__ == '__main__':

# n = int(input())

n = 5

resCnt = 0# 記錄子序列的個數

resList = [0] * n

minFlag = 1# 為了保證不重復,維護一個minFlag,來確保每次拆分后的最小值

p = 0

resolve(n, minFlag)

之前在寫這道程序題時,使用n, m兩個數來做遞歸。初始值 n = m。

然后每次做判斷:

當 n=1 or m = 1 時:

當 n = 1, 直接輸出1, 當 m = 1 時,輸出 n 個1

當 n = m 時,調用遞歸函數 divideNum(n, m-1) + 1

當 n < m 時,divideNum(n, n)

當 n > m 時,也分為兩種情況:

(1) 第一種 divideNum(n, m-1)

(2) 第二種 divideNum(n-m, n),將這兩種的結果相加。

當時通過這種思路來解時,不知道如何輸出分解的子序列,只能得出能夠分解子序列的個數。

今天上午重新考慮了遞歸的思路,記錄一下能夠實現的方法。

標簽:__,輸出,divideNum,minFlag,python,拆分,序列

來源: https://blog.csdn.net/poplarlang/article/details/101428971

總結

以上是生活随笔為你收集整理的python分割数字_python实现整数拆分,输出拆分序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。