栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CCF 消除类游戏(满分代码 + 解题思路 + 技巧总结)201512-2

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CCF 消除类游戏(满分代码 + 解题思路 + 技巧总结)201512-2

技巧总结

有时候思考一个问题,要多以计算机的角度思考
也许一个一个点的判断过程看起来很”笨“,但是正常思维的”先判断整一串是否要消除,再来消除“的代码实现更加繁琐

题目描述


解题思路

该题数据范围不大,可以采用纯模拟暴力解题判断这一连串是否要消除可以思考成当前该点是否应该消除从该点上下左右移动指针,当数值相等时,指针移动,通过指针间距判断是否满足三个及以上相等
代码实现

#include 
#include 
#include 

using namespace std;

const int N = 35;

int n, m;
int a[N][N];
bool b[N][N];

int main()
{
    cin >> n >> m;

    for (int i = 0; i < n; i ++)
    {
        for (int j = 0; j < m; j ++)
        {
            cin >> a[i][j];
        }
    }
    
    //遍历每一个点,判断其是否会被消除
    for (int i = 0; i < n; i ++) 
    {
        for (int j = 0; j < m; j ++)
        {
            int z = j, y = j, s = i, x = i; //设立四个指针
            while (z >= 0 && a[i][z] == a[i][j]) z --; //结束循环时,指针指向当前第一个不满足条件的位置
            while (y < m && a[i][y] == a[i][j]) y ++;
            while (s >= 0 && a[s][j] == a[i][j]) s --;
            while (x < n && a[x][j] == a[i][j]) x ++;
            if (y - z >= 4 || x - s >= 4) b[i][j] = true; //例如3,4,5这三个空格恰好同色,那么当前指针z = 2, y = 6,所以应该>= 4
            //当其左右或上下有连续三个及以上相同时,则该点会被消除
        }
    }
    
    for (int i = 0; i < n; i ++)
    {
        for (int j = 0; j < m; j ++)
        {
            if (!b[i][j]) cout << a[i][j] << " ";
            else cout << 0 << " ";
        }
        cout << endl;
    }
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号