1. 程式人生 > 其它 >第十二屆藍橋杯軟體類模擬賽python程式設計 第二期(4)滿足條件的序列

第十二屆藍橋杯軟體類模擬賽python程式設計 第二期(4)滿足條件的序列

技術標籤: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