用c语言实现:输入第一行一个整数 1-4 表示,表示初级、中级、高级、自定义。如果是自定义,则紧跟着三个整数分别表示行数 N,列数 M 和雷数 C。 从第二行开始的 N 行 M 列表示棋盘。"."表示没有雷,"*"表示有雷,保证棋盘数据合法。储存到一个二维数组,再设置一个二维数组读取,其中"*"记录为-1,其余为0并打印该数组
时间: 2023-06-23 19:09:48 浏览: 95
以下为C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int level, n, m, c;
scanf("%d", &level);
if (level == 1) {
n = m = 9;
c = 10;
} else if (level == 2) {
n = m = 16;
c = 40;
} else if (level == 3) {
n = 16;
m = 30;
c = 99;
} else {
scanf("%d %d %d", &n, &m, &c);
}
int board[n][m];
char input;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf(" %c", &input);
if (input == '*') {
board[i][j] = -1;
} else {
board[i][j] = 0;
}
}
}
int display[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (board[i][j] == -1) {
display[i][j] = -1;
} else {
int count = 0;
if (i > 0 && j > 0 && board[i - 1][j - 1] == -1) count++;
if (i > 0 && board[i - 1][j] == -1) count++;
if (i > 0 && j < m - 1 && board[i - 1][j + 1] == -1) count++;
if (j > 0 && board[i][j - 1] == -1) count++;
if (j < m - 1 && board[i][j + 1] == -1) count++;
if (i < n - 1 && j > 0 && board[i + 1][j - 1] == -1) count++;
if (i < n - 1 && board[i + 1][j] == -1) count++;
if (i < n - 1 && j < m - 1 && board[i + 1][j + 1] == -1) count++;
display[i][j] = count;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (display[i][j] == -1) {
printf("*");
} else {
printf("%d", display[i][j]);
}
}
printf("\n");
}
return 0;
}
```
代码思路如下:
1. 根据输入的难度级别(1-4),确定棋盘的行数、列数和雷数。
2. 读取棋盘数据,并将雷格子设为-1,非雷格子设为0。
3. 遍历每个格子,若为雷格子则将对应的显示数组的格子设为-1,否则统计周围8个格子中雷的数量,并将此数量设为对应的显示数组的格子的值。
4. 输出显示数组,雷格子输出"*",非雷格子输出周围雷的数量。
注意在读取棋盘数据时,需要加上一个空格,以避免读入换行符。
阅读全文