有人帮我看看怎么做吗

img

用一个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;
}

如有帮助,望采纳!谢谢!