P2670 [NOIP2015 普及组] 扫雷游戏
查看原帖
P2670 [NOIP2015 普及组] 扫雷游戏
872482
B_Nullrt楼主2022/11/14 17:52

我在vs上对两个示例都进行了尝试,都没问题,但是提交代码一个都没通过,跪求大佬帮忙看看:

#include <stdio.h>
#include <string.h>
int main() {
	int n, m; scanf("%d %d", &n, &m);
	rewind(stdin);/*清除输入缓冲区*/
	char Message[101][101]; memset(Message, '#', sizeof(Message));

	//生成一个(n+2)*(m+2)的矩阵,外围相当于墙,里面才是具体的信息
	for (int i = 1; i <= n; i++) {
		char tmp[101];//每行中有多少个字符,要申请m+1个空间,最后一个空间给'\0'
		scanf("%s", &tmp);
		rewind(stdin);/*清除输入缓冲区*/
		int count = 0;//count用来遍历tmp字符串
		for (int j = 1; j <= m; j++) {		
			Message[i][j] = tmp[count];
			count++;
		}
	}

	int count = 1;
	for (int i = 1; i < n+1; i++) {
		for (int j = 1; j < m+1; j++) {
			if (Message[i][j] == '*') {
				printf("%c", '*');//表明这个地方为地雷
			}
			else if (Message[i][j] == '#') {
				printf("%c", '#');
				continue;
			}
			else if(Message[i][j] == '?') {
				int sum = 0;//用来标记这个点附近有多少个地雷
				//如果不是地雷,则需要进行判定
				if (Message[i - 1][j - 1] == '*') {//左上角
					sum++;
				}
				if (Message[i][j - 1] == '*') {//左边
					sum++;
				}
				if (Message[i - 1][j] == '*') {//上边
					sum++;
				}
				if (Message[i][j + 1] == '*') {//右边
					sum++;
				}
				if (Message[i + 1][j] == '*') {//下边
					sum++;
				}
				if (Message[i + 1][j + 1] == '*') {//右下角
					sum++;
				}
				if (Message[i - 1][j + 1] == '*') {//右上角
					sum++;
				}
				if (Message[i + 1][j - 1] == '*') {//左下角
					sum++;
				}
				printf("%d", sum);
			}
		}
		if (count < n) {
			count++;
			printf("\n");
		}
	}
	return 0;
}
2022/11/14 17:52
加载中...