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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

ccf試題 消除類(lèi)游戲

2019-11-08 18:42:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

問(wèn)題描述   消除類(lèi)游戲是深受大眾歡迎的一種游戲,游戲在一個(gè)包含有n行m列的游戲棋盤(pán)上進(jìn)行,棋盤(pán)的每一行每一列的方格上放著一個(gè)有顏色的棋子,當(dāng)一行或一列上有連續(xù)三個(gè)或更多的相同顏色的棋子時(shí),這些棋子都被消除。當(dāng)有多處可以被消除時(shí),這些地方的棋子將同時(shí)被消除。   現(xiàn)在給你一個(gè)n行m列的棋盤(pán),棋盤(pán)中的每一個(gè)方格上有一個(gè)棋子,請(qǐng)給出經(jīng)過(guò)一次消除后的棋盤(pán)。   請(qǐng)注意:一個(gè)棋子可能在某一行和某一列同時(shí)被消除。 輸入格式   輸入的第一行包含兩個(gè)整數(shù)n, m,用空格分隔,分別表示棋盤(pán)的行數(shù)和列數(shù)。   接下來(lái)n行,每行m個(gè)整數(shù),用空格分隔,分別表示每一個(gè)方格中的棋子的顏色。顏色使用1至9編號(hào)。 輸出格式   輸出n行,每行m個(gè)整數(shù),相鄰的整數(shù)之間使用一個(gè)空格分隔,表示經(jīng)過(guò)一次消除后的棋盤(pán)。如果一個(gè)方格中的棋子被消除,則對(duì)應(yīng)的方格輸出0,否則輸出棋子的顏色編號(hào)。 樣例輸入 4 5 2 2 3 1 2 3 4 5 1 4 2 3 2 1 3 2 2 2 4 4 樣例輸出 2 2 3 0 2 3 4 5 0 4 2 3 2 0 3 0 0 0 4 4 樣例說(shuō)明   棋盤(pán)中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 樣例輸入 4 5 2 2 3 1 2 3 1 1 1 1 2 3 2 1 3 2 2 3 3 3 樣例輸出 2 2 3 0 2 3 0 0 0 0 2 3 2 0 3 2 2 0 0 0 樣例說(shuō)明   棋盤(pán)中所有的1以及最后一行的3可以被同時(shí)消除,其他的方格中的棋子均保留。 評(píng)測(cè)用例規(guī)模與約定   所有的評(píng)測(cè)用例滿足:1 ≤ n, m ≤ 30。

#include <iostream>#include <stdio.h>#include <queue>#include <algorithm>#include <cmath>#include <string>using namespace std;int a[35][35];int mm[700][3]; //存儲(chǔ)滿足條件的行信息 int QQ[700][3];//存儲(chǔ)滿足條件的列信息int main(){ int n,m; cin>>n>>m; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { cin>>a[i][j]; } } int nn=0; int tmp; int flag;//標(biāo)記相等的元素有幾個(gè) //滿足行消除 for(int i=0; i<n; i++) { tmp=a[i][0]; flag=1; for(int k=1; k<m; k++) { if(tmp==a[i][k]) { flag++; } else { tmp=a[i][k]; if(flag>=3) { mm[nn][0]=i;//記錄可消除元素的起始位置 mm[nn][1]=k-flag; mm[nn][2]=flag;//標(biāo)記可消除的元素有幾個(gè) nn++; } flag=1; } } //如果計(jì)算到行最后一個(gè)元素仍然是可以消除的 if(flag>=3) { mm[nn][0]=i; mm[nn][1]=m-flag; mm[nn][2]=flag; nn++; } } //滿足列消除 flag=1; int nn2=0; for(int i=0; i<m; i++) { tmp=a[0][i]; flag=1; for(int k=1; k<n; k++) { if(tmp==a[k][i]) { flag++; } else { tmp=a[k][i];//更新對(duì)比值 if(flag>=3) { qq[nn2][0]=k-flag; qq[nn2][1]=i; qq[nn2][2]=flag; nn2++; } flag=1; } } if(flag>=3) { qq[nn2][0]=n-flag; qq[nn2][1]=i; qq[nn2][2]=flag; nn2++; } } for(int i=0;i<nn;i++) { for(int j=0;j<mm[i][2];j++) { a[mm[i][0]][mm[i][1]+j]=0; } } for(int i=0;i<nn2;i++) { for(int j=0;j<qq[i][2];j++) { a[qq[i][0]+j][qq[i][1]]=0; } } for(int i=0;i<n;i++) { for(int j=0;j<m-1;j++) { cout<<a[i][j]<<" "; } cout<<a[i][m-1]<<endl; } return 0;}

先行遍歷再列遍歷,標(biāo)記所有可以消除的起點(diǎn)位置和消除的元素個(gè)數(shù)。最后對(duì)應(yīng)位置賦值為0 。

感覺(jué)不難,但是調(diào)bug花了好長(zhǎng)時(shí)間,特別是要注意能消除到最后一個(gè)元素和消除到中間都應(yīng)該判斷一下計(jì)數(shù)計(jì)了幾個(gè)。第二題,仍舊模擬。。。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大渡口区| 汝州市| 呼图壁县| 大洼县| 乌兰察布市| 台东市| 垦利县| 壶关县| 赤壁市| 蓝田县| 平顶山市| 莱西市| 石阡县| 新和县| 怀远县| 尚志市| 花莲县| 天峨县| 罗定市| 莱阳市| 西城区| 旬阳县| 赫章县| 大姚县| 漳平市| 新巴尔虎右旗| 惠来县| 石景山区| 手机| 岢岚县| 新沂市| 滕州市| 陕西省| 盐源县| 吐鲁番市| 石屏县| 长葛市| 五常市| 如东县| 建德市| 长子县|