测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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)

上一题 下一题