用一个30×30的二维字符数组,用rand函数随机生成行列数放“@”到数组中,统计不是“@”的元素的周围8个元素中有多少“@”即可
你题目的解答代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char s[30][30];
srand((unsigned)time(NULL));
int a[8][2] = {
-1, -1,
-1, 0,
-1, 1,
0, -1,
0, 1,
1, -1,
1, 0,
1, 1
};
int n, i, j, k, m, x, y;
for (i = 0; i < 30; i++)
for (j = 0; j < 30; j++)
s[i][j] = '0';
scanf("%d", &n);
for (i = 0; i < n; i++)
{
x = rand() % 30;
y = rand() % 30;
if (s[x][y]!='@')
s[x][y] = '@';
else //如果随机出的位置已经是@,则i--让这次循环不计数
i--;
}
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30; j++)
{
if(s[i][j] != '@')
{
m = 0;
for (k = 0; k < 8; k++)
{
x = i + a[k][0];
y = j + a[k][1];
if(x>=0 && x<30 && y>=0 && y<30 && s[x][y] == '@')
m++;
}
s[i][j] = m+'0';
}
}
}
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30; j++)
{
printf("%c ", s[i][j]);
}
printf("\n");
}
return 0;
}
如有帮助,望采纳!谢谢!