在網上看了大神的決議 對照著他的代碼寫了一遍python版本的 但是超時了 有大神可以幫忙看看哪里可以優化嗎
博客鏈接:https://blog.csdn.net/jopus/article/details/18998403
# 將arr陣列進行全排列,劃分為3個部分a,b,c,判斷是否滿足n = a + b / c
# 將陣列區間轉換為數字
def getNum(arr, x, y):
num = 0
for i in range(x, y + 1):
num = num * 10 + arr[i]
return num
# 進行全排列對每種排列結果進行處理
def prim(arr, k, m):
global count
# 前綴是最后一個位置時,出現一種排列書
if k == m - 1:
# i表示a的末尾位置,不會超過n的位數
for i in range(length):
# 將arr陣列中的0 ~ i轉換為陣列,即為a的值
a = getNum(arr, 0, i)
# 確定b的末尾位置
bLast = (n - a) * arr[8] % 10
# 從a的末尾位置開始,到陣列的結尾,這段陣列的中間位置往后找b的末尾位置
for j in range(i + int((8 - i) / 2), 8):
# 找到b的末尾位置
if arr[j] == bLast:
# 將arr陣列中的i+1 ~ j轉換為陣列,即為b的值
b = getNum(arr, i + 1, j)
# 將arr陣列中的j+1 ~ 8轉換為陣列,即為c的值
c = getNum(arr, j + 1, 8)
if b % c == 0 and a + b / c == n:
count += 1
break
else:
for i in range(k, m):
# 交換前綴,使之產生下一個前綴
arr[k], arr[i] = arr[i], arr[k]
prim(arr, k + 1, m)
# 將前綴換回來,繼續做上一個前綴排列
arr[k], arr[i] = arr[i], arr[k]
n = int(input())
# 定義全排列陣列
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 計算輸入的n有幾位
length = len(str(n))
count = 0
prim(arr, 0, 9)
print(count)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/269391.html
上一篇:準確率99.9%的ip地址定位庫
下一篇:求助
