201512-2消除类游戏

一、原题

问题描述
试题编号: 201512-2
试题名称: 消除类游戏
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有 nm列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
  现在给你一个 nm列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
  请注意:一个棋子可能在某一行和某一列同时被消除。
输入格式
  输入的第一行包含两个整数 nm,用空格分隔,分别表示棋盘的行数和列数。
  接下来 n行,每行 m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。
输出格式
  输出 n行,每行 m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。
样例输入
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
样例说明
  棋盘中第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
样例说明
  棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。
评测用例规模与约定
  所有的评测用例满足:1 ≤  nm ≤ 30。
二、分析

这是一道签到题。毫无难度,P级问题,我感觉P级问题初学者会了语言后都应该能够很简单的做出来,在总结自己的BUG出现规律之后。我现在认为编程有这几层难度:P问题,NP问题,NPHard问题。其中自始自终贯穿的是BUG。它始终有可能出现,除非你能够总结出它出现的规律,然后加以应对。因为BUG有这么几种,思维BUG和视觉BUG,思维BUG在编程中很少出现,除非是NP问题和NPHard问题。视觉BUG是指你没有注意到一些符号在你敲代码的时候漏写了,比如


其实这道题目我是分了两个时间段做的,上次23点多不得不回去睡觉了。写了有12分钟左右,这次大约写了13分钟左右,总共耗时间越25分钟。

上次我是写的输入输出和判断框架,里面具体的判断没有写怎么判断,但是很简单,很暴力,6个if else。

写完后,感觉自信满满,但是神之直觉告诉我,我肯定错了,别直接交,100%,没有任何可能的过的了,于是开了编译器,看看居然真有低级错误,是==判断我给写成了=号,少写了一个,改了过来。自信满满提交了。

于是我觉得上次写对了,没注意,补全之后提交了,结果输出没有空格分开!!0分。

第二次提交错误是因为,判断少写了-1,有个地方判断条件是应该是n-1,我没见,提交完第二次一眼就看到了。改了立刻交就对了。

当然,最重要的是CCF考试不给告诉你你对不对,只是以最后一次提交为准,必须得自己给测试样例才行,因此,提交的时候必须得是对的,否则没有大用,浪费时间,毫无意义。再强调一遍,自己做测试,自己做测试,必须保证对,不能看结果。!!!!!


#include <iostream>
using namespace std;
int n,m;
int bot[30][30]={};
int dele[30][30]={};
bool candel(int r,int c){
int f=0;
if(c>0&&c<m-1&&bot[r][c]==bot[r][c+1]&&bot[r][c]==bot[r][c-1]){
f=1;
}else if(c<m-2&&bot[r][c]==bot[r][c+1]&&bot[r][c]==bot[r][c+2]){
f=1;
}else if(c>1&&bot[r][c]==bot[r][c-1]&&bot[r][c]==bot[r][c-2]){
f=1;
}else if(r>0&&r<n-1&&bot[r][c]==bot[r+1][c]&&bot[r][c]==bot[r-1][c]){
f=1;
}else if(r<n-2&&bot[r][c]==bot[r+1][c]&&bot[r][c]==bot[r+2][c]){
f=1;
}else if(r>1&&bot[r][c]==bot[r-1][c]&&bot[r][c]==bot[r-2][c]){
f=1;
}
return f;
}
void trydel(){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(candel(i,j)){
dele[i][j]=1;
}
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(dele[i][j]==1){
bot[i][j]=0;
}
}
}
}
int main(){
cin>>n>>m;
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
cin>>bot[i][j];
}
}
trydel();
for(i=0;i<n;i++){
for(j=0;j<m;j++){
cout<<bot[i][j]<<" ";
}
cout<<endl;
}

return 0;
}


猜你喜欢

转载自blog.csdn.net/SiKongPop/article/details/79873394