C语言编程问题求解答

题目描述
在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。

关于输入
输入为两个整数,第一个整数m表示中心位置细菌的个数(2≤m≤30),第二个整数n表示经过的天数(1≤m≤4)。

关于输出
输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在培养皿上的分布情况。

例子输入
2 1
例子输出
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 2 4 2 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
备注:输出时每行的末尾不能输出多余的空格

#include <stdio.h>
#include <string.h>

#define N 9

int main()
{
    int m, n;
    scanf("%d %d", &m, &n);

    int a[N][N] = {};
    a[N / 2][N / 2] = m;

    for (int k = 0; k < n; k++)
    {
        int b[N][N] = {};
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < N; j++)
            {
                int x = a[i][j];
                if (x != 0)
                {
                    b[i - 1][j + 1] += x;
                    b[i - 1][j] += x;
                    b[i - 1][j - 1] += x;
                    b[i][j + 1] += x;
                    b[i][j] += 2 * x;
                    b[i][j - 1] += x;
                    b[i + 1][j + 1] += x;
                    b[i + 1][j] += x;
                    b[i + 1][j - 1] += x;
                }
            }
        }
        memcpy(a, b, N * N * sizeof(int));
    }

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            printf("%d", a[i][j]);
            if (j < N - 1)
                printf(" ");
        }
        printf("\n");
    }

    return 0;
}