国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ccf試題 俄羅斯方塊

2019-11-08 20:04:35
字體:
來源:轉載
供稿:網友

問題描述   俄羅斯方塊是俄羅斯人阿列克謝·帕基特諾夫發明的一款休閑游戲。   游戲在一個15行10列的方格圖上進行,方格圖上的每一個格子可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有一個新的由4個小方塊組成的板塊從方格圖的上方落下,玩家可以操作板塊左右移動放到合適的位置,當板塊中某一個方塊的下邊緣與方格圖上的方塊上邊緣重合或者達到下邊界時,板塊不再移動,如果此時方格圖的某一行全放滿了方塊,則該行被消除并得分。   在這個問題中,你需要寫一個程序來模擬板塊下落,你不需要處理玩家的操作,也不需要處理消行和得分。   具體的,給定一個初始的方格圖,以及一個板塊的形狀和它下落的初始位置,你要給出最終的方格圖。 輸入格式   輸入的前15行包含初始的方格圖,每行包含10個數字,相鄰的數字用空格分隔。如果一個數字是0,表示對應的方格中沒有方塊,如果數字是1,則表示初始的時候有方塊。輸入保證前4行中的數字都是0。   輸入的第16至第19行包含新加入的板塊的形狀,每行包含4個數字,組成了板塊圖案,同樣0表示沒方塊,1表示有方塊。輸入保證板塊的圖案中正好包含4個方塊,且4個方塊是連在一起的(準確的說,4個方塊是四連通的,即給定的板塊是俄羅斯方塊的標準板塊)。   第20行包含一個1到7之間的整數,表示板塊圖案最左邊開始的時候是在方格圖的哪一列中。注意,這里的板塊圖案指的是16至19行所輸入的板塊圖案,如果板塊圖案的最左邊一列全是0,則它的左邊和實際所表示的板塊的左邊是不一致的(見樣例) 輸出格式   輸出15行,每行10個數字,相鄰的數字之間用一個空格分隔,表示板塊下落后的方格圖。注意,你不需要處理最終的消行。 樣例輸入 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 3 樣例輸出 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0

感覺這種題目方法應該挺多的,每個人想法估計也不一樣,我想的是,先找下落圖形在原始圖像中的范圍,然后看這個范圍里面有1的最高點(稱為局部最高點)是哪一個,然后就確定了這個圖像能下落多高,最高點的正上方一定是下落圖形中的1(這個位置我稱為參考點),其他點的位置可以由參考點的位置相對位移算出。

還是第二題,模擬,沒有算法(難道這是一個規律???)

#include <iostream>#include <memory.h>#include <stdio.h>using namespace std;int org[20][15];int a[5][5];//存儲版塊形狀int now[5];//int b[5][2];//存儲版塊中1的位置int main(){ for(int i=1;i<=15;i++) { for(int j=1;j<=10;j++) { cin>>org[i][j]; } } int num=1; for(int i=1;i<=4;i++) { for(int j=1;j<=4;j++) { cin>>a[i][j]; if(a[i][j]==1) { b[num][1]=i;//行位置 b[num][2]=j;//列位置 num++; } } } int n; cin>>n;//版塊形狀在原圖形開始的第幾列 for(int i=1;i<=4;i++) { now[i]=b[i][2]+n-1;//now存儲版塊移動后"1"所在的列序號 } int xx=16,yy=0;// int flag=0; //尋找這四個列序號在初始圖像中行序號最小的1的位置(也就是原始圖像的局部最高點) for(int i=1;i<=4;i++) { for(int j=1;j<=15;j++) { if(org[j][now[i]]==1) { if(j<=xx)//這里必須是小于等于,小于就只有40分,不知道為什么? { xx=j;//記錄原始圖像在該列序號區域內最高點位置 yy=now[i]; flag=i;//記錄該最高點對應下落圖形的第幾個點 } break;//找到該點就跳出循環,看下一列 } } } if(flag==0)//如果不存在這樣的點(該列范圍區域均為0) { flag=4;//將最后一個點作為參考點 xx=16; yy=now[4]; } int mxx; int myy; //計算下落圖形其他點相對于參考點(局域最高點的正上方)的位移 for(int i=1;i<=4;i++) { mxx=b[i][1]-b[flag][1]; myy=b[i][2]-b[flag][2]; org[xx-1+mxx][yy+myy]=1; } for(int i=1;i<=15;i++) { for(int j=1;j<10;j++) { cout<<org[i][j]<<" "; } cout<<org[i][10]<<endl; } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黎川县| 固镇县| 栾城县| 佛坪县| 柳州市| 五峰| 灵璧县| 普安县| 南昌县| 宜宾县| 绥宁县| 如东县| 湟中县| 阿拉善左旗| 三江| 磴口县| 金堂县| 博乐市| 华蓥市| 浦北县| 靖西县| 淮北市| 沧源| 田林县| 嘉兴市| 射阳县| 曲松县| 称多县| 句容市| 海口市| 阿合奇县| 通河县| 五常市| 长海县| 永昌县| 白河县| 武威市| 铅山县| 峨眉山市| 宜丰县| 察哈|