A50515. 细菌的繁殖与扩散
填空题
困难
知识点
题目描述
细菌的繁殖与扩散
题目描述
在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n天后,细菌在培养皿中的分布情况。
输入格式
输入为两个整数,第一个整数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 <iostream>
#include<cstdio>
using namespace std;
int be,day;
int a[10][10],b[10][10];
void b0(){ //将b数组归零
int i,j;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
b[i][j]=0;
return;
}
int main(){
int i,j,k;
cin>>be>>day;
a[4][4]=be; //初始化
for(k=0;k<day;k++){
for(i=1;i<8;i++){
for(j=1;j<8;j++){
//处理,详见上
int tmp=a[i][j];
b[i][j]+=tmp*2;
b[i-1][j]+=tmp;
b[i-1][j-1]+=tmp;
b[i-1][j+1]+=tmp;
b[i][j-1]+=tmp;
b[i][j+1]+=tmp;
b[i+1][j]+=tmp;
b[i+1][j-1]+=tmp;
b[i+1][j+1]+=tmp;
}
}
for(i=0;i<9;i++){
for(j=0;j<9;j++){
a[i][j]=b[i][j]; //将a与b中的数据互换
}
}
b0(); //归零
}
for(i=0;i<9;i++){ //输出
for(j=0;j<9;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}答案解析
这个方法是用类似车轮的方法,在b数组中计算,再将b中的数据复制到a里。因为有多层循环嵌套,所以时间复杂度会很高,容易TLE(勉强能AC)
上一题
下一题