機械人塔
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發子彈得分都是多少呢?有哪些可能情...