首页后端开发ASP.NET【C++趣味程序】之开心消消乐

【C++趣味程序】之开心消消乐

时间2024-01-31 04:16:03发布访客分类ASP.NET浏览930
导读:收集整理的这篇文章主要介绍了【C++趣味程序】之开心消消乐,觉得挺不错的,现在分享给大家,也给大家做个参考。你们是否同小编一样,闲暇之余总爱拿起手机,打开小游戏玩一玩。本文就是一款火爆的游戏开心消消乐的C++版的制作过程,有兴趣的小伙伴来了...
收集整理的这篇文章主要介绍了【C++趣味程序】之开心消消乐,觉得挺不错的,现在分享给大家,也给大家做个参考。

你们是否同小编一样,闲暇之余总爱拿起手机,打开小游戏玩一玩。本文就是一款火爆的游戏开心消消乐的C++版的制作过程,有兴趣的小伙伴来了解一下吧!

问题描述

给定一个矩阵, 判断移动哪一个格子,可以实现消除。(定义连续三个即可消除)

据说是华为的笔试题。

分析

先写一个函数,判断包含(i, j)的格子是否可能实现消除。

然后就是向右向下交换,然后调用上面写好的函数判断
被交换的两个格子是否实现消除。

重点是:

@H_360_39@
  • 只需要向右向下交换,因为遍历的时候,后面的交换会重复。前一个判断了向右交换是否消除,后一个遍历就不需要再判断向左交换是否重复了。
  • 一定要对被交换的两个格子都判断是否能消除,才能实现全面的判断。
  • 代码

    ////  main.cpp//  huawei////  Created by SteveWong on 11/10/2016.//  Copyright © 2016 SteveWong. All rights reserved.//#include iostream>
        #include string>
        #include vector>
        #include ctime>
        //#include cstdlib>
        using namespace std;
        const int LEN = 8;
    void pmap(int map[][LEN]){
            for (int i = 0;
         i  LEN;
     ++i)    {
                for (int j = 0;
         j  LEN;
     ++j)        {
                    cout  map[i][j]  " ";
            }
                cout  endl;
        }
    }
    // 检查以(i,j)为中心的点, 看是否可以消除bool check(int map[][LEN], int i, int j)// 保证i、j不越界,{
            if (        (i-1>
        =0 &
        &
         i+1LEN &
        &
         map[i-1][j]==map[i][j]&
        &
        map[i][j]==map[i+1][j])        || (j-1>
        =0 &
        &
         j+1LEN &
        &
         map[i][j-1]==map[i][j]&
        &
        map[i][j]==map[i][j+1])        || (i-2>
        =0 &
        &
         map[i-2][j]==map[i-1][j]&
        &
        map[i-1][j]==map[i][j])        || (j-2>
        =0 &
        &
         map[i][j-2]==map[i][j-1]&
        &
        map[i][j-1]==map[i][j])        || (i+2LEN &
        &
         map[i+2][j]==map[i+1][j]&
        &
        map[i+1][j]==map[i][j])        || (j+2LEN &
        &
         map[i][j+2]==map[i][j+1]&
        &
    map[i][j+1]==map[i][j])        )    {
                return true;
        }
            return false;
    }
    bool swapAndJudge(int m[][LEN], int i, int j)// 保证i、j不越界, 应该对被swap的两个点都做纵向和横向的检查{
            int map[LEN][LEN];
            for (int ii = 0;
         ii  LEN;
     ++ii)    {
                for (int jj = 0;
         jj  LEN;
     ++jj)        {
                    map[ii][jj] = m[ii][jj];
            }
        }
        // 原来就可以消除    if (check(map, i, j))    {
                PRintf("no need to swap at (%d, %d)\n", i, j);
                return true;
        }
        // 只需要向下换和向右换    // 向下换    if (i + 1  LEN)    {
                swap(map[i+1][j], map[i][j]);
            if (check(map, i, j))        {
                    printf("# swap and sweap! (%d, %d)\n", i, j);
                    return true;
            }
            if (check(map, i+1, j))        {
                    printf("# swap and sweap! (%d, %d)\n", i+1, j);
                    return true;
            }
                swap(map[i+1][j], map[i][j]);
    // 换回来    }
        // 向右换    if (j + 1  LEN)    {
                swap(map[i][j+1], map[i][j]);
            if (check(map, i, j))        {
                    printf("# swap and sweap! (%d, %d)\n", i, j);
                    return true;
            }
            if (check(map, i, j+1))        {
                    printf("# swap and sweap! (%d, %d)\n", i, j+1);
                    return true;
            }
                swap(map[i][j+1], map[i][j]);
    // 换回来    }
            return false;
    }
    void findMinSwap(int map[][LEN]){
            for (int i = 0;
         i  LEN;
     ++i)    {
                for (int j = 0;
         j  LEN;
     ++j)        {
                if (swapAndJudge(map, i, j))            {
                        printf("gotcha! (%d, %d)\n", i, j);
                }
            }
        }
    }
    int main(int argc, const char * argv[]) {
            // insert code here...//    std::cout  "Hello, World!\n";
            srand(unsigned(time(0)));
            for (int i = 0;
         i  LEN;
     ++i)    {
                for (int j = 0;
         j  LEN;
     ++j)        {
                    map[i][j] = rand() % 5;
            }
        }
            cout  "xiaoxiaole!\n";
            findMinSwap(map);
            pmap(map);
            return 0;
    }
        

    【推荐课程:C++视频教程】

    以上就是【C++趣味程序】之开心消消乐的详细内容,更多请关注其它相关文章!

    声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

    上一篇: 【C语言】递归和非递归分别实现s...下一篇:C++实现在二维数组中的查找猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

    若转载请注明出处: 【C++趣味程序】之开心消消乐
    本文地址: https://pptw.com/jishu/593468.html
    怎么利用Node.js进行html页面跳转 浅析Angular中的可观察对象、观察者和RxJS操作符

    游客 回复需填写必要信息