数组

【问题描述】

小苯在玩一个简化版的三消小游戏。棋盘有 5 5 列,每个格子里恰好有一个方块,颜色只可能是 RGB 三种之一,分别表示红、绿、蓝。当前棋盘如下:

R R G R G

G R R R R

G G R R G

B R G R B

R B G G G

游戏规则如下:

在某一轮中,如果一段连续方块颜色相同,且它们在同一行或同一列,并且长度至少为 3,那么这段方块中的所有格子都会被标记。

一轮中,所有被标记的格子会同时消除。

如果某个格子同时属于横向和纵向的可消除连续段,它也只会被消除一次。

一轮消除结束后,每一列中剩余的方块都会下落,填补这一列中的空位。

然后继续重复上述过程,直到棋盘上再也无法发生消除为止。

你的任务就是求出:当游戏最终停止时,棋盘上还剩多少个方块。

#include<iostream>
using namespace std;
void remov(int** p,int **re){
    for(int i=0;i<5;i++){
        int a=4;
        for(int j=4;j>=0;j--){
            if(re[j][i]==0){
                p[a--][i]=p[j][i];
            }
        }for(int j=a;j>=0;j--){
            p[j][i]=-1;
        }
    }
}int rec(int** p,int **re){
    int k=0;
    for(int i=0;i<5;i++){
        for(int j=0;j<3;j++){
            if(p[i][j]==p[i][j+1]&&p[i][j]==p[i][j+2]&&p[i][j]!=-1){
                re[i][j]=re[i][j+1]=re[i][j+2]=1;
                k++;
            }
        }
    }for(int i=0;i<5;i++){
        for(int j=0;j<3;j++){
            if(p[j][i]==p[j+1][i]&&p[j][i]==p[j+2][i]&&p[j][i]!=-1){
                re[j][i]=re[j+1][i]=re[j+2][i]=1;
                k++;
            }
        }
    }return k;
}
int main(){
    char str[5][6]={
    "RRGRG",
    "GRRRR",
    "GGRRG",
    "BRGRB",
    "RBGGG"};
    int **p=new int*[5];
    int** reco=new int*[5];
    for(int i=0;i<5;i++){
        p[i]=new int[5];
        reco[i]=new int[5]();
        for(int j=0;j<5;j++){
            if(str[i][j]=='R'){
                p[i][j]=1;
            }if(str[i][j]=='G'){
                p[i][j]=2;
            }if(str[i][j]=='B'){
                p[i][j]=3;
            }
        }
    }
    //start
    while(1){
        int k=rec(p,reco);
        if(k==0){
            break;
        }else{
            remov(p,reco);
            for(int i=0;i<5;i++){
                for(int j=0;j<5;j++){
                    reco[i][j]=0;
                }
            }
        }
    }
    int num=0;
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            if(p[i][j]>0){
                num++;
            }
        }
    }
    cout<<num;
    delete[] p;
    return 0;
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务