千家信息网

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

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关怎么使用C语言实现细菌的繁殖与扩散,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.引言这是我在csdn写的第一篇文章~作为一个初学C的
千家信息网最后更新 2025年01月20日怎么使用C语言实现细菌的繁殖与扩散

这篇文章将为大家详细讲解有关怎么使用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所以不用管),这是第一次循环。然后再进行一次循环,判断如果旧数据矩阵的某一个位置的数据不为零,就在新数据矩阵对应位置的周围八个格子都加上该数据,这一步就相当于细菌在周围单元格中的扩散。这样我们就完成了递推过程。

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

    代码

    #includeint 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语言实现细菌的繁殖与扩散"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    细菌 数据 位置 培养基 矩阵 两个 整数 篇文章 上一 单元 培养皿 情况 循环 输入 输出 语言 中央 代码 后代 天后 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎么打武装突袭3服务器 魔兽怀旧服远程服务器有什么用 数据结构在软件开发中的用处 数据库备份还原到新建的库 丽水企业软件开发流程 计算机网络安全员好就考吗 信息网络安全征文手写图片 高级数据库技术及应用下载 网络安全排行沈阳通用软件公司 计算机化职业信息数据库 佛山餐饮软件开发常见问题 mysql数据库题目选择题 美国互联网的科技公司 阿里巴巴云服务器登录密码 益阳学软件开发怎么样 speedtest怎么换服务器 招商证券软件开发笔试 北京软件开发行业的税收优惠 服务器文件怎么防护 通讯网络安全主要是保障 acc多人找不到服务器 在数据库中在检索结果中 国家网络安全与信息中心卓子寒 计算机网络技术专业包括哪些科目 神州量子网络技术有限公司 抓灵魂兽的服务器 通信与网络技术国家研究中心 自己搭建服务器存储监控视频 数据库云化技术要求 网络安全入侵防御设备
    0