消除类游戏

消除类游戏


from CCF-CSP 2015-12-2
Time limit:1s
Memory limit:256MB

在这里插入图片描述


分别按行按列进行处理,每一行或每一列只要有连续3个以上相等的数,就将其标记为需要消除。最后将所有需要消除的位置都改为0,然后输出即可。

ac代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,k;
int x[35][35];
bool note[35][35];
void row(){         //按行处理
    for(i = 1;i <= n;++i)               //对每一行进行处理
        for(j = 1;j <= m - 2;++j){      //每一行都从第一个位置到最后一个位置进行遍历
            int num = 1;                //连续的个数
            for(k = j + 1;k <= m;++k)
                if(x[i][k] == x[i][j])
                    ++num;
                else
                    break;
            if(num >= 3)                //连续个数大于等于3时需要消除
                for(int p = j;p < j + num;++p)
                    note[i][p] = true;
            j = k - 1;
        }
}
void col(){         //按列处理
    for(j = 1;j <= m;++j)               //对每一列进行处理
        for(i = 1;i <= n - 2;++i){      //对每一列的每一个位置惊醒处理
            int num = 1;
            for(k = i + 1;k <= n;++k)
                if(x[k][j] == x[i][j])
                    ++num;
                else
                    break;
            if(num >= 3)                //连续个数大于等于3时需要消除
                for(int p = i;p < i + num;++p)
                    note[p][j] = true;
            i = k - 1;
        }
}
int main(){
    cin>>n>>m;
    for(i = 1;i <= n;++i)
        for(j = 1;j <= m;++j)
            cin>>x[i][j];
    row(),col();
    //将需要消除的地方标记为0
    for(i = 1;i <= n;++i)
        for(j = 1;j <= m;++j)
            if(note[i][j])
                x[i][j] = 0;
    //输出
    for(i = 1;i <= n;++i){
        for(j = 1;j <= m;++j)
            cout<<x[i][j]<<" ";
        cout<<"\n";
    }
    return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan_Lowe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值