温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用C语言实现细菌的繁殖与扩散

发布时间:2021-11-02 13:52:17 来源:亿速云 阅读:301 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关怎么使用C语言实现细菌的繁殖与扩散,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    一.引言

    这是我在csdn写的第一篇文章~作为一个初学C的萌新,昨天碰到一道关于细菌繁殖与扩散的题目,觉得很有意思,想了一个晚上,终于想到了解法?

    二.题目

    详情细菌的繁殖与扩散

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

    描述:

    在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。

    输入:

    输入为两个整数,第一个整数m表示中心位置细菌的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 4)。

    输出:

    输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在培养皿上的分布情况。

    样例输入

    21

    样例输出

    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

    三.思路以及代码

    思路

    我的想法是这道题需要定义两个二维数组,一个用来储存上一天的数据(旧),一个用来计算并保存这一天的数据(新)。而这一天的数据又可以保存到旧数据中,用于下一天的计算(递推)。

    首先,在原位置上的每一个细菌都可以生两个崽儿在原先的位置,并且在周围的八个格子中各留下一个新生儿?然后不幸凋亡……

    这样,我们先把上一天的数据保存在旧数据矩阵中,然后把上一天每个数据都乘以二放到新数据的矩阵中(0*2=0所以不用管),这是第一次循环。然后再进行一次循环,判断如果旧数据矩阵的某一个位置的数据不为零,就在新数据矩阵对应位置的周围八个格子都加上该数据,这一步就相当于细菌在周围单元格中的扩散。这样我们就完成了递推过程。

    注意哦,这个递归只能进行四天(循环四次),要不然可能出现堆栈错误……

    代码

    #include<stdio.h>
    int main()
    {
    	int old[9][9], birth[9][9];//旧的培养基和新的培养基,用于递推
    	int m, n;//初始中央细菌数以及递推的天数
    	int i, j, p;
    	scanf("%d%d", &m, &n);
    	for (i = 0;i < 9;i++)
    		for (j = 0;j < 9;j++)
    		{
    			birth[i][j] = 0;//变量的初始化
    		}
    	birth[4][4] = m;//中央细菌已经长出
    	for (p = 1;p <= n;p++)//开始递推
    	{
    		for (i = 0;i < 9;i++)
    			for (j = 0;j < 9;j++)
    			{
    				old[i][j] = birth[i][j];//旧培养基相当于一个储存容器,储存上一天的培养基情况
    				birth[i][j] = 2 * birth[i][j];//每个位置上的每个旧细菌生两个崽,然后凋亡
    			}
    		for (i = 0;i < 9;i++)
    			for (j = 0;j < 9;j++)
    			{
    				if (old[i][j] != 0)//如果旧培养基上某个位置有细菌,就在新培养基上它的周围生出一圈崽儿(记得每个细菌各生一圈儿……)
    				{
    					birth[i - 1][j - 1] = birth[i - 1][j - 1] + old[i][j];
    					birth[i - 1][j] = birth[i - 1][j] + old[i][j];
    					birth[i - 1][j + 1] = birth[i - 1][j + 1] + old[i][j];
    					birth[i][j - 1] = birth[i][j - 1] + old[i][j];
    					birth[i][j + 1] = birth[i][j + 1] + old[i][j];
    					birth[i + 1][j - 1] = birth[i + 1][j - 1] + old[i][j];
    					birth[i + 1][j] = birth[i + 1][j] + old[i][j];
    					birth[i + 1][j + 1] = birth[i + 1][j + 1] + old[i][j];
    				}
    			}
    	}
    	for (i = 0;i < 9;i++)
    	{
    		for (j = 0;j < 9;j++)
    			printf("%d ", birth[i][j]);
    		printf("\n");
    	}
    	return 0;
    }

    关于“怎么使用C语言实现细菌的繁殖与扩散”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI