[c]扫雷

题目描述

扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。

玩家翻开一个非地雷格时,该格将会出现一个数字------提示周围格子中有多少个是地雷格。

现在给出n行m列的雷区中的地雷分布,请计算出每个非地雷格周围的地雷格数。

注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。

输入描述:

复制代码
第一行输入两个整数n,m ,分别表示雷区的行数和列数。

接下来n行,每行m个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。

1<=n,m<=100

输出描述:

复制代码
输出包含n行,每行m个字符,描述整个雷区。用‘*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符

示例1

输入

复制代码
3 3
*??
???
?*?

输出

复制代码
*10
221
1*1

题目很容易理解,就是判断字符数组元素周围*元素的个数

下面附上代码

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n, m;
	int count = 0;
	char s[100][100] = { 0 };
	scanf("%d %d", &n, &m);
	getchar();
	for (int i = 1; i <= n; i++)
	{
		for (int k = 1; k <= m; k++)
		{
			s[i][k] = getchar();
		}
		getchar();
	}
	for (int i = 1; i <= n; i++)
	{
		for (int k = 1; k <= m; k++)
		{
            count=0;
			if (s[i][k] == '*')
			{
				printf("*");
			}
			else
			{
				if (s[i - 1][k] == '*' )
					count++;
				if (s[i + 1][k] == '*')
					count++;
				if (s[i][k - 1] == '*')
					count++;
				if (s[i][k + 1] == '*')
					count++;
				if (s[i - 1][k - 1] == '*' )
					count++;
				if (s[i - 1][k + 1] == '*')
					count++;
				if (s[i + 1][k + 1] == '*')
					count++;
				if (s[i + 1][k -1] == '*')
					count++;
                printf("%d", count);
			}
		}
		printf("\n");;
	}
	return 0;
}

注意每输入一组需要用一次getchar,来读取输入完的回车,新手可能会遇到输入时候程序直接结束了,明明还没有输完,就打印结果了,这种情况可能就是getchar没有合理利用

我们可以输入完进行调试,看看创建的字符数组中是不是自己想要的字符

相关推荐
轻口味27 分钟前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Chinese Red Guest2 小时前
python
开发语言·python·pygame
一棵星2 小时前
Java模拟Mqtt客户端连接Mqtt Broker
java·开发语言