基礎練習 特殊回文數 python

2021-10-01 02:28:43 字數 1828 閱讀 7738

在做這道題時,我的**(注釋部分)一直超時。後來我算了一下我的時間複雜度,雖然我只用了一層迴圈,也就是o(n),但是它迴圈了1000000-10001=989999次。後來我突然想到它是回文數,最大也就六位還是兩邊對稱的情況,我可以把每一位拆開看每一位可能的數字只有10個,排列前半部分即使有三層迴圈,但也只需要迴圈1000次,這樣就大大減少了時間。

**如下:

# import datetime

# start = datetime.datetime.now()

# n = eval(input())

# for i in range(10001, 1000000):

# a = i // 100000

# b = (i // 10000) % 10

# c = (i // 1000) % 10

# d = (i // 100) % 10

# e = (i // 10) % 10

# f = i % 10

# sum = a + b + c + d + e + f

# if a == 0:

# if b != f or c != e:

# continue

# else:

# if a != f or b != e or c != d:

# continue

# if sum == n:

# print(i)

# end = datetime.datetime.now()

# print (end-start)

n =eval

(input()

)if n %2==

1:for a in

range(1

,10):

for b in

range(10

):for c in

range(10

):if(a + b)*2

+ c == n:

res =

str(a)

+str

(b)+

str(c)

print

(res + res[1:

:-1]

)else

:for a in

range(1

,10):

for b in

range(10

):for c in

range(10

):if(a + b)*2

+ c == n:

res =

str(a)

+str

(b)+

str(c)

print

(res + res[1:

:-1]

)for a in

range(1

,10):

for b in

range(10

):for c in

range(10

):if(a + b + c)*2

== n:

res =

str(a)

+str

(b)+

str(c)

print

(res + res[::

-1])

基礎練習 特殊回文數

問題描述 123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。樣例輸入52 樣例輸出 899998 989...

基礎練習 特殊回文數

問題描述 123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。樣例輸入 52樣例輸出 899998 989...

基礎練習 特殊回文數

問題描述 123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。樣例輸入 52 樣例輸出 899998 98...