前幾天呢,一位小老弟給我分享了這道很有意思的題目,可是捏,我找遍了網路,也沒有找到這個題的題解,于是乎,余勇當此題拓荒者也!
來人哪,把題目獻上來!
題目描述
摩天大樓是日本人創作的游戲, 它于1992年在紐約舉行的第一屆世界益智冠軍賽上獲得了首次廣泛曝光,當時發行商Sekai Bunka-sha向競爭對手介紹了他們的《 Puzzer》雜志, 在美國,Kevin Stone對其進行了增強,
該游戲如下所示:在每個正方形中放置一個高度為1到5的摩天大樓,該行中任意兩個摩天大樓的高度都不相同,輸入的值共兩個,分別是從左右能看到的大樓數量(高樓會擋住底樓哦),

在上面的示例中,從左側看,可以看到4座摩天大樓:#2,#3,#4和#5, #1被#3阻擋, 從右側看,只能看到一個摩天大樓, #5阻止所有其他大樓, 因此,左側的資料為4,右側的資料為1,
輸入描述
共一行輸入,表示從左側和從右側看到的大樓數量,
輸出描述
共一行,輸出有幾種擺放的情況可以滿足輸入,
樣例
輸入
1 2
輸出
6
其實這個題說難也不難,簡直可以約等于簡單,這個題乍一看蠻唬人的,但是如果你仔細想想,就會發現這個題,不就是個模擬演算法的題嗎?真是《簡單極了》!(話雖這么說,本蒟蒻想了不下四十分鐘)因為這個題沒有什么規律可言,所以說只能根據提描述來列舉出所有情況進行模擬,程序如下:
列舉1-5個樓高的所有排列方式,
判斷從右往左可以看到幾個樓,
判斷從左往右可以看到幾個樓,
判斷左右測看到的樓高是否符合要求,符合則計數,
所以,上代碼!
#include<iostream>
using namespace std;
int main(){
int a[6],l,r,sum=0;
cin>>l>>r;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
for(int k=1;k<=5;k++){
for(int m=1;m<=5;m++){
for(int n=1;n<=5;n++){
if(i!=j&&i!=k&&i!=m&&i!=n&&j!=k&&j!=m&&j!=n&&k!=m&&k!=n&&m!=n){
int suml=1,sumr=1;
a[1]=i,a[2]=j,a[3]=k,a[4]=m,a[5]=n;
int ll=a[1],rr=a[5];
for(int ii=1;ii<=5;ii++){
if(a[ii]>ll){
suml++;
ll=a[ii];
}
}
for(int ii=5;ii>=1;ii--){
if(a[ii]>rr){
sumr++;
rr=a[ii];
}
}
if(suml==l&&sumr==r){
sum++;
}
}
}
}
}
}
}
cout<<sum;
}
最后想弱弱問一句,有沒有更簡潔的方法(值代碼行數少)?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299423.html
標籤:其他
上一篇:PAT頂級2021-09題解
