问题描述
给定一个矩阵, 判断移动哪一个格子,可以实现消除。(定义连续三个即可消除)
据说是华为的笔试题。
分析
先写一个函数,判断包含(i, j)的格子是否可能实现消除。
然后就是向右向下
交换,然后调用上面写好的函数判断
被交换的两个格子
是否实现消除。
重点是:
- 只需要向右向下交换,因为遍历的时候,后面的交换会重复。前一个判断了向右交换是否消除,后一个遍历就不需要再判断向左交换是否重复了。
- 一定要对被交换的两个格子都判断是否能消除,才能实现全面的判断。
代码
//
// 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)为中心的点,