最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)消消樂游戲

 更新時間:2020年12月16日 10:41:14   作者:stevewongbuaa  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)消消樂游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)消消樂游戲的具體代碼,供大家參考,具體內(nèi)容如下

問題描述

給定一個矩陣, 判斷移動哪一個格子,可以實現(xiàn)消除。(定義連續(xù)三個即可消除)

據(jù)說是華為的筆試題。

分析

先寫一個函數(shù),判斷包含(i, j)的格子是否可能實現(xiàn)消除。

然后就是向右向下交換,然后調(diào)用上面寫好的函數(shù)判斷
被交換的兩個格子是否實現(xiàn)消除。

重點是:

1、只需要向右向下交換,因為遍歷的時候,后面的交換會重復(fù)。前一個判斷了向右交換是否消除,后一個遍歷就不需要再判斷向左交換是否重復(fù)了。
2、一定要對被交換的兩個格子都判斷是否能消除,才能實現(xiàn)全面的判斷。

代碼

//
// 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+1<LEN && map[i-1][j]==map[i][j]&&map[i][j]==map[i+1][j])
 || (j-1>=0 && j+1<LEN && 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+2<LEN && map[i+2][j]==map[i+1][j]&&map[i+1][j]==map[i][j])
 || (j+2<LEN && 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不越界, 應(yīng)該對被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;
 }
 // 只需要向下?lián)Q和向右換
 // 向下?lián)Q
 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;
}

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

javascript經(jīng)典小游戲匯總

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C/C++堆區(qū)專篇精講

    C/C++堆區(qū)專篇精講

    一直以來總是對這個問題的認(rèn)識比較朦朧,我相信很多朋友也是這樣的,總是聽到內(nèi)存一會在棧上分配,一會又在堆上分配,那么它們之間到底是怎么的區(qū)別呢,讓我們一起來看看
    2022-10-10
  • C語言實現(xiàn)動態(tài)順序表詳解

    C語言實現(xiàn)動態(tài)順序表詳解

    這篇文章主要介紹了C語言實現(xiàn)動態(tài)順序表的實現(xiàn)代碼的相關(guān)資料,動態(tài)順序表在內(nèi)存中開辟一塊空間,可以隨我們數(shù)據(jù)數(shù)量的增多來擴容,需要的朋友可以參考下
    2021-08-08
  • C++實現(xiàn)簡易的五子棋小游戲

    C++實現(xiàn)簡易的五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡易的五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 基于C++浮點數(shù)(float、double)類型數(shù)據(jù)比較與轉(zhuǎn)換的詳解

    基于C++浮點數(shù)(float、double)類型數(shù)據(jù)比較與轉(zhuǎn)換的詳解

    本篇文章是對C++中浮點數(shù)(float、double)類型數(shù)據(jù)比較與轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言詳細(xì)解析有符號數(shù)與無符號數(shù)的表示

    C語言詳細(xì)解析有符號數(shù)與無符號數(shù)的表示

    我們知道,在C語言中存在無符號數(shù)和有符號數(shù),但是對于計算機而言,其本身并不區(qū)別有符號數(shù)和無符號數(shù),因為在計算機里面都是O或者1,但是在我們的實際使用中有時候需要使用有符號數(shù)來表示一個整數(shù),因此我們規(guī)定,當(dāng)最高位為1的時,表示為負(fù)數(shù),最高位為0時,表示為正數(shù)
    2022-04-04
  • C++實例詳解lambda表達(dá)式的使用

    C++實例詳解lambda表達(dá)式的使用

    Lambda表達(dá)式是現(xiàn)代C++在C ++ 11和更高版本中的一個新的語法糖 ,在C++11、C++14、C++17和C++20中Lambda表達(dá)的內(nèi)容還在不斷更新。 lambda表達(dá)式(也稱為lambda函數(shù))是在調(diào)用或作為函數(shù)參數(shù)傳遞的位置處定義匿名函數(shù)對象的便捷方法
    2022-05-05
  • C++中sort()函數(shù)和priority_queue容器中比較函數(shù)的區(qū)別詳析

    C++中sort()函數(shù)和priority_queue容器中比較函數(shù)的區(qū)別詳析

    C++中sort()和priority_queue都能自定義比較函數(shù),其中sort()自定義的比較函數(shù)比較好理解,priority_queue中自定義的比較函數(shù)的效果和sort()是相反的,這篇文章主要給大家介紹了關(guān)于C++中sort()函數(shù)和priority_queue容器中比較函數(shù)的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 用C語言實現(xiàn)五子棋小游戲

    用C語言實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了用C語言實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 淺析C++?atomic?和?memory?ordering

    淺析C++?atomic?和?memory?ordering

    這篇文章主要介紹了C++?atomic?和?memory?ordering的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • opencv檢測直線方法之形態(tài)學(xué)方法

    opencv檢測直線方法之形態(tài)學(xué)方法

    這篇文章主要為大家詳細(xì)介紹了opencv檢測直線方法之形態(tài)學(xué)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評論

大邑县| 香港| 枣庄市| 林甸县| 衡东县| 化州市| 武宁县| 内黄县| 衢州市| 宜兴市| 托里县| 汉源县| 瓮安县| 郧西县| 巨鹿县| 浪卡子县| 雷州市| 平顶山市| 浠水县| 油尖旺区| 建水县| 磐石市| 和龙市| 德昌县| 新巴尔虎左旗| 贵港市| 景宁| 吉水县| 广元市| 文成县| 宽城| 肥乡县| 永康市| 灵璧县| 龙游县| 偃师市| 竹山县| 泰宁县| 建瓯市| 鹤岗市| 濉溪县|