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.困难总结
困难:如何保证所有数据同步变化,不受先后顺序影响?
解决办法:建立两个数组,一个保存数据,一个计算数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现