1.8.15细菌的繁殖与扩散

1.题目意思

描述

在边长为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
2.题目意思总结
从题目可知,在9*9的空间里有m个细菌,每一次繁殖,周围的八个单元格都加上中间格子现有的(上一次繁殖后)细菌个数,中间格子的细菌数量扩大到原来的2倍,以此类推。

3.解题思路
(1)建立两个数组及一些辅助变量,并输入
(2)第一个数组用于保存上一次繁殖的细菌个数,第二个数组根据第一个数组的数据计算繁殖后个数,并将数据保存在第一个数组中,以完成一次繁殖。
(3)输出数组,注意空格和换行。
4.代码实现

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a[10][10],b[10][10],n;
  cin>> a[5][5]>> n;
  b[5][5]=a[5][5];
  for(int i=1;i<=9;i++){
    for(int k=1;k<=9;k++){
      if(i!=5 or k!=5){//将数组中心赋值为m,其余赋值为0
        a[i][k]=0;
        b[i][k]=0;
      }
    }
  }
  for(int j=1;j<=n;j++){
    for(int i=1;i<=9;i++){
      for(int k=1;k<=9;k++){//计算每一次繁殖数据,中间格子数量*2,周围格子加上中间格子原有数量
        if(a[i][k]>0){
          b[i][k]=b[i][k]+a[i][k];
          b[i-1][k-1]=b[i-1][k-1]+a[i][k];
          b[i-1][k]=b[i-1][k]+a[i][k];
          b[i-1][k+1]=b[i-1][k+1]+a[i][k];
          b[i][k-1]=b[i][k-1]+a[i][k];
          b[i][k+1]=b[i][k+1]+a[i][k];
          b[i+1][k-1]=b[i+1][k-1]+a[i][k];
          b[i+1][k]=b[i+1][k]+a[i][k];
          b[i+1][k+1]=b[i+1][k+1]+a[i][k];
        }
      }
    }
    for(int i=1;i<=9;i++){//将每一次繁殖数据同步至另一个数组
      for(int k=1;k<=9;k++){
        a[i][k]=b[i][k];
      }
    }
  }
  for(int i=1;i<=9;i++){
    for(int k=1;k<=9;k++){//输出
      cout<< a[i][k]<<" ";
    }
    cout<< endl;
  }
  return 0;
}

5.困难总结

困难:如何保证所有数据同步变化,不受先后顺序影响?

解决办法:建立两个数组,一个保存数据,一个计算数据。

posted @   邓乔泽  阅读(331)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示