这道题目就难在怎么进行判断。其实就是一个九宫格判断,判断周围8个格子是否为*. 难点在于边缘的位置没法进行九宫格判断,使用呢,要把棋盘扩大一圈。 我的代码如下
#include <stdlib.h>
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
char* a = (char*)calloc((m + 2) * (n + 2), sizeof(char));//我觉calloc更好用 因为自带初始化
int i = 0;
int j = 0;
for (i = 1; i < m + 1; i++)
{
for (j = 1; j < n + 1; j++)
{
scanf(" %c ", a + i * (n + 2) + j);//注意这里的读取一定要加上前后两个空格 来忽略对换行的读取
//我就是在这里调了半天
}
}
int si = 0;
int sj = 0;
int num = 0;
for (i = 1; i < m + 1; i++)
{
for (j = 1; j < n + 1; j++)
{
if (*(a + i * (n + 2) + j) == '*')//如果为 * 则直接输出 *
printf("*");
else//如果不为 * 说明需要进行九宫格判断
{
num = 0;
sj = j - 1;
for (si = i - 1; si <= i + 1; si++)
{
for (sj = j - 1; sj <= j + 1; sj++)
{
if (*(a + si * (n + 2) + sj) == '*')
num++;
}
}
printf("%c", '0' + num);//其实这里是多余的 可以直接将 num 作整数输出
}
}
printf("\n");
}
return 0;
}