二维数组_细菌的繁殖与扩散

该篇文章描述了一个编程问题,要求使用C++编写代码,模拟细菌在边长为9的正方形培养皿中的繁殖过程,考虑细菌在中心繁殖以及向周边扩散的情况,输出n天后的细菌分布矩阵。
摘要由CSDN通过智能技术生成

任务描述

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

输入格式:

输入为两个整数,第一个整数m表示中心位置细菌的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 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 <cstdio>
#include <cstring>
int main ()

{
    int Breed[9][9]; // 表示每轮在自己格子上繁殖的细菌数量
    int Spread[9][9];  //表示每轮向周围传播的细菌数量
    int i,j; //两个通用迭代子
    int days, bacteria;
    memset(Breed, 0, sizeof(Breed)); //给数组初始化为 0 ;
    memset(Spread, 0, sizeof(Spread));//需要用两个数组分开来计数
    scanf("%d %d", &bacteria,  &days); 
    Breed[4][4] = bacteria; //在数组中心初始化细菌个数

    for (int d = 1; d<=days;d++)

{
        for (i=0;i<9;i++)

{
            for (j=0;j<9;j++)

{
                if ( i!=8 && j!=8 )

{  
                    Spread[i-1][j-1] += Breed[i][j]; //(不能直接加给square会造成超限,应该先加给某个新增值,最后再将两个矩阵相加)
                    Spread[i-1][j] += Breed[i][j];
                    Spread[i-1][j+1] += Breed[i][j];
                    Spread[i][j-1] += Breed[i][j];
                    Spread[i][j+1] += Breed[i][j];
                    Spread[i+1][j-1] += Breed[i][j];
                    Spread[i+1][j] += Breed[i][j];
                    Spread[i+1][j+1] += Breed[i][j]; 
                    // 给格子的上下左右加上本体数量的offspring 
                    Breed[i][j] *= 2; //本体乘

                } //在边界上的格子不满足上下左右都有其他格子的条件,为防溢出要禁止。
            }
        }    

        for (i=0;i<9;i++){
            for (j=0;j<9;j++){
                Breed[i][j] += Spread[i][j];
            }
        }
        memset(Spread, 0, sizeof(Spread));
    }
    for (i=0;i<9;i++){
        for (j=0;j<9;j++){
            printf("%d", Breed[i][j] );
            if (j<8) printf(" ");
            else printf("\n");
        }
    }
    return 0;
}

  • 36
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的reshape函数可以将一个数组或矩阵变换为指定的行数和列数,也可以将一个一维数组变成多维数组。下面是一个将一个二维数组变成三维数组的示例: ```python import numpy as np # 定义一个二维数组 arr2d = np.array([[1, 2], [3, 4], [5, 6]]) # 使用reshape将二维数组转化为三维数组 arr3d = arr2d.reshape((3, 1, 2)) print(arr3d) ``` 输出结果: ``` array([[[1, 2]], [[3, 4]], [[5, 6]]]) ``` 在这个示例中,我们首先定义了一个二维数组arr2d,然后使用reshape函数将其转化为一个三维数组arr3d。reshape函数的参数是一个元组,第一个元素表示新数组的行数,第二个元素表示新数组的列数,第三个元素表示新数组的深度。 如果要将多个二维数组合并成一个三维数组,可以使用numpy的concatenate函数。下面是一个示例: ```python import numpy as np # 定义两个二维数组 arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) # 使用concatenate函数将两个二维数组合并成一个三维数组 arr3 = np.concatenate((arr1.reshape((1, 2, 2)), arr2.reshape((1, 2, 2))), axis=0) print(arr3) ``` 输出结果: ``` array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) ``` 在这个示例中,我们首先定义了两个二维数组arr1和arr2,然后使用reshape函数将它们转化为二维数组,再使用concatenate函数将它们合并成一个三维数组arr3。concatenate函数的第一个参数是一个元组,表示要合并的数组,第二个参数axis表示合并的方向。在这个示例中,我们使用axis=0表示沿着第一个维度合并,也就是将两个二维数组合并成一个三维数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值