标签:color 二维数组 问题 lan 相同 直接 使用 c++ bool
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址
由于一个位置可能同时被一行消除或者被一列消除,故不能直接在原棋盘中操作。
代码中建立了一个remove二维数组,标识一个位置是否需要消除。
消除某一行时,统计棋子左侧出现同色棋子的个数。在遇到新颜色棋子时时,如果之前的颜色出现超过三次,则进行消除。
C++
#include <stdio.h> int main() { int board[31][31] = {0}; bool remove[31][31] = {0}; int N, M; scanf("%d%d", &N, &M); for(int n=0; n<N; n++) { for(int m=0; m<M; m++) { scanf("%d", &board[n][m]); } } int color; int cnt; for(int n=0; n<N; n++) { color = board[n][0]; cnt = 1; for(int m=1; m<=M; m++) { if(board[n][m]==color) { cnt++; } else { if(cnt>=3) { while(cnt) { remove[n][m-cnt] = true; cnt--; } } color = board[n][m]; cnt = 1; } } } for(int m=0; m<M; m++) { color = board[0][m]; cnt = 1; for(int n=1; n<=N; n++) { if(board[n][m]==color) { cnt++; } else { if(cnt>=3) { while(cnt) { remove[n-cnt][m] = true; cnt--; } } color = board[n][m]; cnt = 1; } } } for(int n=0; n<N; n++) { for(int m=0; m<M; m++) { if(remove[n][m]) printf("%d ", 0); else printf("%d ", board[n][m]); } printf("\n"); } }
标签:color 二维数组 问题 lan 相同 直接 使用 c++ bool
原文地址:http://www.cnblogs.com/meelo/p/7684435.html