IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 细菌的繁殖与扩散——C语言实现 -> 正文阅读

[C++知识库]细菌的繁殖与扩散——C语言实现

目录

一.引言

二.题目详情

细菌的繁殖与扩散??????

三.思路以及代码

思路

代码


一.引言

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

二.题目详情

细菌的繁殖与扩散??????

总时间限制:?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

三.思路以及代码

思路

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

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

这样,我们先把上一天的数据保存在旧数据矩阵中,然后把上一天每个数据都乘以二放到新数据的矩阵中(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++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:23:34  更:2021-10-30 12:24:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:52:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码