藍橋python 剪郵票 2016 第七題

2021-10-10 07:50:33 字數 1744 閱讀 3500

題目描述 如【圖 1.jpg】, 有 12 張連在一起的 12 生肖的郵票。 現在你要從中剪下 5 張來,要求必須 是連著的。 (僅僅連線乙個角不算相連) 比如,【圖 2.jpg】,【圖 3.jpg】中,粉紅色所 示部分就是合格的剪取。

請你計算,一共有多少種不同的剪取方法。 請填寫表示方案數目的整數。 注意:你提交的應該是乙個整數,不要填寫任何多餘的內容 或說明性文字。

先給大家說下這個題目拿過來我的思路吧

首先題目的意思是有12個框框,我們要選擇5個框框,再來判斷是否連通,若聯通,則答案加1

python的話從12個框框中選5個很簡單,即呼叫itertools.combinations函式(記住是組合而不是排列)

但是要判斷是否聯通,對於兩個框框肯定是相鄰的,題目上標註的數字的話則是兩個框框之差絕對值為1或者4!可是有個問題,就是絕對值為1的不一定相鄰,比如 8 9

因此我們可以把以上的圖變(想成)為下面的

說明:改數字對結果毫無影響,只是讓我們更好判斷是否連通

顯然我們看到 只要兩個框框之差絕對值為 1或者5 就一定相鄰

在12個框框中選擇5個後,我們用bfs演算法判斷這個5個框框是否連通

**如下

import itertools

defisliant

(x):

##相當於bfs,找出每個框框的所有相鄰框框後判斷

q=0]

) seen=

set(

) seen.add(x[0]

)while

len(q)

>0:

n=q.pop(0)

if n-

1in x and n-

1not

in seen:1)

seen.add(n-1)

if n+

1in x and n+

1not

in seen:1)

seen.add(n+1)

if n-

5in x and n-

5not

in seen:5)

seen.add(n-5)

if n+

5in x and n+

5not

in seen:5)

seen.add(n+5)

ifset

(seen)

==set

(x):

##所有看到過的seen陣列裡的均聯通,若有乙個框框與其他的不連通,則seen長度絕對小於原有的x長度

return

true

else

:return

false

count=0a=

[1,2

,3,4

,6,7

,8,9

,11,12

,13,14

]b=list

(itertools.combinations(a,5)

)for i in b:

if isliant(i)

: count+=

1print

(count)

2016藍橋 剪郵票

講述來自 感謝作者 剪郵票如 圖1.jpg 有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,圖2.jpg 圖3.jpg 中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。思路 先找到5個數的組合,然後從第乙個數字開始遍歷...

2016 藍橋杯 剪郵票 dfs

這是2016年藍橋杯c語言省賽b組的第七題 題目 如下圖,有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,下面兩張圖中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。輸出 請填寫表示方案數目的整數。oj鏈結 思路 通過對...

藍橋杯2016初賽 剪郵票

題目描述 如下圖,有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,下面兩張圖中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。輸出請填寫表示方案數目的整數。思想 一看資料量應該就知道是乙個簡單的 dfs 或者 bfs 的...