SSL 練習題目 種樹 題解

2021-08-07 01:28:30 字數 2400 閱讀 7901

種樹(normal)

time limit:1000ms  memory limit:65536k

total submit:213 accepted:114

description

在6*6的方格地盤中,種植24顆樹,使每行、每列都有4顆樹。

求出所有可能的種植方案總數。

種植方案的說明:輸出乙個6*6的矩陣,種樹的方格用「*」表示,沒種樹的用「.」表示。

如下是一種方案((樣例僅說明格式,並不代表結果)

****..

..****

**..**

..****

****..

**..**

input

output

乙個數即總數

sample input

sample output

//以下表示其中的10種,不需要輸出,輸出總數即可

case 1:

****..

****..

**..**

**..**

..****

..****

case 2:

****..

****..

**..**

*.*.**

.*.***

..****

case 3:

****..

****..

**..**

*.*.**

..****

.*.***

case 4:

****..

****..

**..**

*..***

.**.**

..****

case 5:

****..

****..

**..**

*..***

..****

.**.**

case 6:

****..

****..

**..**

.**.**

*..***

..****

case 7:

****..

****..

**..**

.**.**

..****

*..***

case 8:

****..

****..

**..**

.*.***

*.*.**

..****

case 9:

****..

****..

**..**

.*.***

..****

*.*.**

case 10:

****..

****..

**..**

..****

**..**

..****

source

elba

#include

#include

using namespace std;

int s,l[7];

void trees(int x,int k1,int k2)

l[k1]++;

l[k2]++;//該列空格的數量加1

for (int i=1;i<=5;i++)

for (int j=i+1;j<=6;j++)

trees(x+1,i,j);

l[k1]--;

l[k2]--;//回溯

}int main()

{ for (int i=1;i<=5;i++)

for (int j=i+1;j<=6;j++)

trees(1,i,j);

cout<

題解:

本題有兩種解法,第一種是乙個乙個格仔決定種還是不種,可是這樣時間會比較久,所以我就想到了用八皇后的做法,

for (int i=1;i<=5;i++)

for (int j=i+1;j<=6;j++)

trees(x+1,i,j);

首先一行的樹要4顆,這樣迴圈會比較麻煩,那麼就可以迴圈空位的地方,x表示行數,i和j表示空位的位置。

然後用變數l表示該列有多少個空位,最多2個。然後當列數到了6行之後就可以退出累加了。

python練習題目

三色球問題 有紅 黃 藍三種顏色的求,其中紅球 3 個,黃球 3 個,綠球 6 個。先將這 12 個球混合放在乙個盒子中,從中任意摸出 8 個球,程式設計計算摸出球的各種顏色搭配。print red tyellow tblue for red inrange 0,4 for yellow in ra...

Hive練習題目

hive 基本操作 1 資料自己造 a表 id int,name string b表 id int,job id int,num int c表 job id int,job string 建表語句 載入資料 a表和b表進行鏈結操作,並觀察結果 內連線 左連線 left join 小表在前,大表在後 ...

練習題目2

1 將陣列a中的內容和陣列b中的內容進行交換 陣列一樣大 思路 新建乙個陣列作為中間陣列進行交換.如下 2 計算1 1 1 2 1 3 1 4 1 5 1 99 1 100的值.思路 通過每一輪迴圈給分子乘以 1來控制加數的正負號,計算出和.如下 3 編寫程式數一下1到199的所有整數 現過多少次數...