细菌的繁殖与扩散

总时间限制: 
1000ms
内存限制: 
65536kB
描述

在边长为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
来源

北大医学部07计算概论模拟考试1


源代码如下:

#include<stdio.h>
void init_sz();
void xjfz();
void xj();
void display();
int a[9][9]={0},b[9][9]={0};
int i,j;
int main()
{
	int m,n;
	scanf("%d %d",&m,&n);
	a[4][4]=m;
	for(int day=1;day<=n;day++)
	{
                init_sz();
	  		    xjfz();  //细菌繁殖; 
	  		    xj();  //新变旧 
    }
	display();
	return 0;
}
void init_sz()
{
	for(i=0;i<9;i++)
	{
		for(j=0;j<9;j++)
		{
			b[i][j]=0; 
		}
	}
} 
void xjfz()
{
	for(i=1;i<=7;i++)
	{
		for(j=1;j<=7;j++)
		{
			b[i][j]+=2*a[i][j];  //中心细菌数 
			b[i][j-1]+=a[i][j];  //左面细菌数 
			b[i][j+1]+=a[i][j];  //右面细菌数 
			b[i-1][j]+=a[i][j];  //上面细菌数 
			b[i+1][j]+=a[i][j];  //下面细菌数 
			b[i-1][j+1]+=a[i][j];//左下细菌数 
			b[i+1][j+1]+=a[i][j];//右下细菌数 
			b[i+1][j-1]+=a[i][j];//右上细菌数 
			b[i-1][j-1]+=a[i][j];//左上细菌数 
		}
	}
}
void xj()
{
	for(i=0;i<9;i++)
	{
		for(j=0;j<9;j++)
		{
			a[i][j]=b[i][j];
		}
	}
}
void display()
{
	for(i=0;i<9;i++)
	{
		for(j=0;j<9;j++)
		{
			printf("%d",a[i][j]);
			if(j<8)
			{
				printf(" ");
			}
			else
			{
				printf("\n");
			}
		}
	}
}


错误代码:

#include<stdio.h>
void init_sz();
void xjfz();
void xj();
void display();
int a[9][9]={0},b[9][9]={0};
int i,j;
int main()
{
	int m,n;
	scanf("%d %d",&m,&n);
	a[4][4]=m;
	for(int day=1;day<=n;day++)
	{
          for(i=0;i<9;i++)
            {
               for(j=0;j<9;j++
                 {
                    init_sz();
	  		    xjfz();  //细菌繁殖; 
	  		    xj();  //新变旧 }
}
    }
	display();
	return 0;
}
void init_sz()
{
	for(i=0;i<9;i++)
	{
		for(j=0;j<9;j++)
		{
			b[i][j]=0; 
		}
	}
} 
void xjfz()
{
	for(i=1;i<=7;i++)
	{
		for(j=1;j<=7;j++)
		{
			b[i][j]+=2*a[i][j];  //中心细菌数 
			b[i][j-1]+=a[i][j];  //左面细菌数 
			b[i][j+1]+=a[i][j];  //右面细菌数 
			b[i-1][j]+=a[i][j];  //上面细菌数 
			b[i+1][j]+=a[i][j];  //下面细菌数 
			b[i-1][j+1]+=a[i][j];//左下细菌数 
			b[i+1][j+1]+=a[i][j];//右下细菌数 
			b[i+1][j-1]+=a[i][j];//右上细菌数 
			b[i-1][j-1]+=a[i][j];//左上细菌数 
		}
	}
}
void xj()
{
	for(i=0;i<9;i++)
	{
		for(j=0;j<9;j++)
		{
			a[i][j]=b[i][j];
		}
	}
}
void display()
{
	for(i=0;i<9;i++)
	{
		for(j=0;j<9;j++)
		{
			
			if(j<8)
			{
				printf(" ");
			}
			else
			{
				printf("\n");
			}
		}
	}
}

错误原因:

1.数组没有初始化

2.没有先输出再空格换行

3.循环太多了....


还有老师的有一道题目输入了三个值居然成功的秀过了系统....偷偷滑稽

猜你喜欢

转载自blog.csdn.net/yang_2002/article/details/79953003