第十二屆藍橋杯軟體類模擬賽python程式設計 第二期(4)滿足條件的序列
阿新 • • 發佈:2021-01-28
技術標籤:python藍橋杯模擬列表python資料結構演算法藍橋杯
如有錯誤歡迎指正
如有更好的解法歡迎分享
Topic
請問有多少個序列滿足下面的條件:
1. 序列的長度為 5。
2. 序列中的每個數都是 1 到 10 之間的整數。
3. 序列中後面的數大於等於前面的數。
Solution_1
要想簡單快速的解決
(程式碼量小,節省時間)
我最先想到的就是全排列方法
對1到10 中取五位數字全排列為陣列a
設立一個flag作為引數
如果i中不滿足遞增則flag為1並退出
若滿足遞增則結果res + 1
Code_1
import itertools
a = list(itertools. permutations([i for i in range(1, 11)], 5))
res = 0
for i in a:
flag = 0
j = 1
while j < 5:
if i[j] > i[j - 1]:
j += 1
else:
flag = 1
break
if flag == 0:
res += 1
print(res)
Solution_2
還是首先對1到10 中取五位數字全排列為陣列a
之後對a中每一個元組i進行判斷
思路就是判斷排序後的列表(遞增的)與原是否相同列表
若相同則說明原列表遞增
若不同則說明原列表不遞增
(這裡面有個小坑)
如果直接將i進行記錄會導致i和j是深拷貝的關係
這樣如果對i排序也是對j排序
所以在記錄時要一位一位數字從i新增到j中
Code_2
import itertools
a = list(itertools.permutations([i for i in range(1, 11)], 5))
res = 0
for i in a:
i = list(i)
j = []
for z in i:
j.append(z)
i. sort()
if j == i:
res += 1
print(res)
Answer
252