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

菜学C++ Day59 OJ题目1580扫雷(mine)

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

菜学C++ Day59 OJ题目1580扫雷(mine)

我也不知道为什么我的vs打不开这个头文件

 官方解法:它是按照从a[1][1]开始输入字符,并且划分到110,所以当i-1和j-1的时候是有开创了空间的数组了的,由于判断语句是*,所以原本的0是不相匹配的。

我的解法:我本来也是想穷举那八个,而且还是把数组外围变成两行两列加四个角,相当于8个情况加中间的一起穷举,可是写着写着感觉太麻烦了,然后发现可以for循环那8个位置呀,当不满足的时候就跳过继续嘛,这不就是continue语句吗!然后就利用这样列出来了

#include
using namespace std;

#define N 100
#define M 100

//输入地雷分布
void f(int n,int m,char a[N][M]) {
	for(int i=0;i> x;
			a[i][j] = x;
		}
}
//寻找非地雷区周围的地雷数量
int s(int n, int m, int i,int j,char a[N][M]) {
	int k = 0;
	for (int x = i - 1; x <= i + 1; x++) {
		if (x == -1 || x == n)continue;
		for (int y = j - 1; y <= j + 1; y++) {
			if (y == -1 || y ==m)continue;
			if (a[x][y] == '*')k++;
		}		
	}
	return k;
}

int main() {
	int n, m;
	cin >> n >> m;
	char a[N][M] = {};
	f(n, m, a);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (a[i][j] == '?')cout << s(n, m, i, j, a);
			else cout << '*';
		}
		cout << "n";
	}
	return 0;
}

这是本来的穷举情况,并没有列举完

//两行两列四个角
	if (i == 0 && j != 0 && j != m - 1) {
		if (a[i][j-1] == '*')k++;
		if (a[i][j+1] == '*')k++;
		if (a[i+1][j-1] == '*')k++;
		if (a[i+1][j] == '*')k++;
		if (a[i+1][j+1] == '*')k++;
	}
	if (i == n-1 && j != 0 && j != m - 1) {
		if (a[i][j - 1] == '*')k++;
		if (a[i][j + 1] == '*')k++;
		if (a[i - 1][j - 1] == '*')k++;
		if (a[i - 1][j] == '*')k++;
		if (a[i - 1][j + 1] == '*')k++;
	}
	if (j == 0 && i != 0 && i != n - 1) {
		if (a[i-1][j] == '*')k++;
		if (a[i+1][j] == '*')k++;
		if (a[i - 1][j + 1] == '*')k++;
		if (a[i][j+1] == '*')k++;
		if (a[i + 1][j + 1] == '*')k++;
	}
	if (j == m-1 && i != 0 && i != n - 1) {
		if (a[i - 1][j] == '*')k++;
		if (a[i + 1][j] == '*')k++;
		if (a[i - 1][j - 1] == '*')k++;
		if (a[i][j - 1] == '*')k++;
		if (a[i + 1][j - 1] == '*')k++;
	}
	if (i == 0 && j == 0) {
		if (a[i][j + 1] == '*')k++;
		if (a[i+1][j] == '*')k++;
		if (a[i+1][j + 1] == '*')k++;
	}
	if (i == 0 && j == m-1) {
		if (a[i][j + 1] == '*')k++;
		if (a[i + 1][j] == '*')k++;
		if (a[i + 1][j + 1] == '*')k++;
	}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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