藍橋杯第七屆決賽 機械人塔

2021-09-17 21:45:20 字數 1980 閱讀 4024

機械人塔

x星球的機械人表演拉拉隊有兩種服裝,a和b。他們這次表演的是搭機械人塔。

類似:a

b ba b a

a a b b

b b b a b

a b a b b a

隊內的組塔規則是:

a 只能站在 aa 或 bb 的肩上。

b 只能站在 ab 或 ba 的肩上。

你的任務是幫助拉拉隊計算一下,

在給定a與b的人數時,可以組成多少種花樣的塔。

輸入一行兩個整數 m 和 n,空格分開(0分別表示a、b的人數,

保證人數合理性。

要求輸出乙個整數,表示可以產生的花樣種數。

例如:使用者輸入:

1 2程式應該輸出:

3再例如:

使用者輸入:

3 3程式應該輸出:

4資源約定:

峰值記憶體消耗 < 256m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

解題思路:

通過輸入的a,b的值先確定 塔的層數,因為題目說明了保證人數的合理性,無論a,b給多少人,能堆出來的塔的層數一定是唯一確定的。然後從第一層到最後一層一次遍歷,找到符合條件的陣列塔,然後篩選出塔中a和b 的數目和給定的a,b數目相同的塔的數量。

#include

using namespace std;

int a,b;

char arr[

500]

[500];

//陣列塔

int deep=0;

//塔的深度

char ab[2]

=;int count=0;

//符合條件的數目

bool isok

(int x,

int y)

else

}else}}

return true;

}bool istrue()

if(arr[i]

[j]==

'b')}}

if(x==a&&y==b)

return false;

}void

dfs(

int i,

int j)

}else

else}}

}}intmain()

}dfs(0

,0);

cout<}

之前的**太麻煩了,再看的時候又寫了一種簡潔一點的:

#include

#include

using namespace std;

char arr[

501]

[501];

char v[2]

=;int r[2]

;//a ,b 機械人塔的數目

int num;

//塔的深度

int sum=0;

//符合條件的種類數

void

dfs(

int row,

int col)

else}}

else}if

(arr[row+1]

[col]

!=arr[row+1]

[col+1]

)}}}

}int

main()

}dfs

(num,1)

;//從最底層向上排

cout

}

第七屆藍橋杯決賽試題 機械人塔

機械人塔 x星球的機械人表演拉拉隊有兩種服裝,a和b。他們這次表演的是搭機械人塔。類似 a b ba b a a a b b b b b a b a b a b b a 隊內的組塔規則是 a 只能站在 aa 或 bb 的肩上。b 只能站在 ab 或 ba 的肩上。你的任務是幫助拉拉隊計算一下,在給定...

藍橋杯 C語言B組 第七屆決賽題解 機械人塔

機械人塔 x星球的機械人表演拉拉隊有兩種服裝,a和b。他們這次表演的是搭機械人塔。類似 a b b a b a a a b b b b b a b a b a b b a 隊內的組塔規則是 a 只能站在 aa 或 bb 的肩上。b 只能站在 ab 或 ba 的肩上。你的任務是幫助拉拉隊計算一下,在給...

藍橋杯 第七屆決賽 打靶

打靶 小明參加x星球的打靶比賽。比賽使用電子感應計分系統。其中有一局,小明得了96分。這局小明共打了6發子彈,沒有脫靶。但望遠鏡看過去,只有3個彈孔。顯然,有些子彈準確地穿過了前邊的彈孔。不同環數得分是這樣設定的 1,2,3,5,10,20,25,50 那麼小明的6發子彈得分都是多少呢?有哪些可能情...