C语言笔记 | 数据结构入门指南

news2024/11/25 4:34:09

文章目录

0x00 前言

0x01 百鸡百钱

0x02 借书方案知多少

0x03 持续更新···

0x04 参考文献

0x05 总结


0x00 前言

        写这篇《C语言笔记 | 数据结构入门指南》主要是为了帮助更多的编程爱好者打开数据结构的大门,同时也是为了自我编程水平能力的提升。在深奥的数据结构领域中,这篇入门指南就像海上的一叶扁舟。虽是虚无缥缈,但是总比什么都没有要好得多。我将竭尽我所能,简明扼要地解释相关案例中的知识点。其中不乏会有错误,恳请各位老师不吝指正。

        

        

        

0x01 百鸡百钱

0x1 题目描述

        我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

        

        

0x2 问题分析

关于百鸡百钱的不定方程组:

        其中, x 表示鸡翁、 y 表示鸡母、 z 表示鸡雏。在计算机中,我们可以通过使用计算机思维对这类题目计算,而不是数学思维。可以使用穷举的方法将每个结果列举出来,直到计算机找出哪个正确的结果。也就是怎么买可以做到百鸡百钱。

\begin{cases} x + y + z = 100 \\ 5x + 3y + \frac{z}{3} = 100 \\ \end{cases}

        

        

0x3 代码设计

int x, y, z;

        代码解析:定义三个变量, x 表示鸡翁、 y 表示鸡母、 z 表示鸡雏。

        

	for(x = 0; x <= 20; x++)
	{
		for(y = 0; y <= 33; y++)
		{
			z = 100 - (x + y);

        代码解析:这里可以使用三重循环,但是鸡雏可以直接通过 100 减去鸡翁和鸡母的和来确定。减少一个循环可以起到代码优化的效果。第一个循环用来确定鸡翁的数量,第二个循环用来确定鸡母的数量。

        

				if((5 * x + 3 * y + z / 3) == 100)
				{
					printf("鸡翁:%2d | 鸡母 :%2d | 鸡雏:%2d\n", x, y, z);
				}

        代码解析: 使用 if 判断语句判断,如果不定方程组的第二个式子的值等于 100 ,那么就执行一次 printf 输出函数记录一次百鸡百钱的值。

        

        

0x4 完整代码

#include<stdio.h>
int main()
{
	int x, y, z;
	for(x = 0; x <= 20; x++)
	{
		for(y = 0; y <= 33; y++)
		{
			z = 100 - (x + y);
				if((5 * x + 3 * y + z / 3) == 100)
				{
					printf("鸡翁:%2d | 鸡母 :%2d | 鸡雏:%2d\n", x, y, z);
				}
		}
	}

	return 0;
}

        

        

0x5 运行效果

鸡翁: 0 | 鸡母 :25 | 鸡雏:75
鸡翁: 3 | 鸡母 :20 | 鸡雏:77
鸡翁: 4 | 鸡母 :18 | 鸡雏:78
鸡翁: 7 | 鸡母 :13 | 鸡雏:80
鸡翁: 8 | 鸡母 :11 | 鸡雏:81
鸡翁:11 | 鸡母 : 6 | 鸡雏:83
鸡翁:12 | 鸡母 : 4 | 鸡雏:84

--------------------------------
Process exited after 0.08475 seconds with return value 0
请按任意键继续. . .

        

        

        

0x02 借书方案知多少

0x1 题目描述

        小明有 5 本新书,要借给 A 、 B 、 C 三位小朋友,若每人每次只能借 1 本,则可以有多少种不同的借法?

        

        

0x2 问题分析

        这题关于排列组合,也就是计算 5 个数中 3 个不同数的所有排列方法,那么可以先进行编号 1~5 表示这五本不同的书,接着定义三个变量 a 、 b 、 c 表示三个小朋友。那么可以使用循环嵌套的方法让每个小朋友进行选书,在 a 和 b之间判断不能选一样的书。接着让 a 和 c 以及 b 和 c 他们之间也不能选择一样的书。

        

        

0x3 代码设计

	int a, b, c, i = 0;

         代码解析:定义一个变量 a 表示小朋友 A 、变量 b 表示小朋友 B 、变量 c 表示 小朋友 C 。定义 i = 0 用来累计有多少种不同的借法。

         

	for(a = 1; a <= 5; a++)
	{
		for(b = 1; b <= 5; b++)
		{
			if(a != b)
			{
				for(c = 1; c <= 5; c++)
				{
					if(a != c && b != c)
					{
						i++;
						printf("a:%d | b:%d | c:%d\n", a, b, c);
					}
				}	
			}
		}
	}

         代码解析:第一层循环用来计算小朋友 A 拿的书,第二层循环计算小朋友 B 拿的书。给出判断条件,如果 a 不等于 b 则执行以下代码,就是判断如果小朋友 A 和小朋友 B 拿了一样的书就是没有意义的,则不执行。接着给第三层循环,用来计算小朋友 C 。判断如果 A 和 C 拿了一样的书或者是 B 和 C 拿了一样的书,那么代码不执行。如果都不是一样的书则会执行 i++ 累加器用来计算有多少种分配的次数,并打印结果显示这次小朋友 A 、 B 、 C 是拿的什么书。

         

	printf("借法:%d", i);

         代码解析:使用 printf 函数输出变量 i 累加的值,输出的结果就是借法的次数。

        

        

0x4 完整代码

#include<stdio.h>
int main()
{
	int a, b, c, i=0;
	for(a = 1; a <= 5; a++)
	{
		for(b = 1; b <= 5; b++)
		{
			if(a != b)
			{
				for(c = 1; c <= 5; c++)
				{
					if(a != c && b != c)
					{
						i++;
						printf("a:%d | b:%d | c:%d\n", a, b, c);
					}
				}	
			}
		}
	}
	printf("借法:%d", i);
	
	return 0;
}

        

        

0x5 运行效果

a:1 | b:2 | c:3
a:1 | b:2 | c:4
a:1 | b:2 | c:5
a:1 | b:3 | c:2
a:1 | b:3 | c:4
a:1 | b:3 | c:5
a:1 | b:4 | c:2
a:1 | b:4 | c:3
a:1 | b:4 | c:5
a:1 | b:5 | c:2
a:1 | b:5 | c:3
a:1 | b:5 | c:4
a:2 | b:1 | c:3
a:2 | b:1 | c:4
a:2 | b:1 | c:5
a:2 | b:3 | c:1
a:2 | b:3 | c:4
a:2 | b:3 | c:5
a:2 | b:4 | c:1
a:2 | b:4 | c:3
a:2 | b:4 | c:5
a:2 | b:5 | c:1
a:2 | b:5 | c:3
a:2 | b:5 | c:4
a:3 | b:1 | c:2
a:3 | b:1 | c:4
a:3 | b:1 | c:5
a:3 | b:2 | c:1
a:3 | b:2 | c:4
a:3 | b:2 | c:5
a:3 | b:4 | c:1
a:3 | b:4 | c:2
a:3 | b:4 | c:5
a:3 | b:5 | c:1
a:3 | b:5 | c:2
a:3 | b:5 | c:4
a:4 | b:1 | c:2
a:4 | b:1 | c:3
a:4 | b:1 | c:5
a:4 | b:2 | c:1
a:4 | b:2 | c:3
a:4 | b:2 | c:5
a:4 | b:3 | c:1
a:4 | b:3 | c:2
a:4 | b:3 | c:5
a:4 | b:5 | c:1
a:4 | b:5 | c:2
a:4 | b:5 | c:3
a:5 | b:1 | c:2
a:5 | b:1 | c:3
a:5 | b:1 | c:4
a:5 | b:2 | c:1
a:5 | b:2 | c:3
a:5 | b:2 | c:4
a:5 | b:3 | c:1
a:5 | b:3 | c:2
a:5 | b:3 | c:4
a:5 | b:4 | c:1
a:5 | b:4 | c:2
a:5 | b:4 | c:3
借法:60
--------------------------------
Process exited after 0.08041 seconds with return value 0
请按任意键继续. . .

        

        

        

0x03 持续更新···

打鱼还是晒网

        

        

        

0x04 参考文献

[1].百度百科. 百鸡百钱[EB/OL]. [2023-05-29]. https://baike.baidu.com/item/%E7%99%BE%E9%B8%A1%E7%99%BE%E9%92%B1.

[2].刘河飞, 闰凯峰. 趣学Python算法100例[M]. ISBN:978-7-111-66598-4. 北京: 机械工业出版社, 2020.9.

        

        

        

0x05 总结

文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正交实验进行方差分析

一、案例介绍 想要从某种草药中提取植物酚&#xff0c;利用专业知识发现可能有三个条件会影响植物酚的提取&#xff0c;每个条件有三个水平&#xff0c;想要通过实验&#xff0c;寻找植物酚的最佳提取条件&#xff0c;其中提取植物酚的参考标准为植物酚的含量&#xff08;案例…

在线原型设计是什么?8款在线原型工具助你高效设计!

原型设计是产品经理、设计师和开发工程师沟通最初的产品设想的重要工具。 在线原型通过云端的方式具象化地呈现产品内容、结构及粗略的布局&#xff0c;说明用户将如何与产品进行交互&#xff0c;搭建了产品经理、设计师和开发工程师沟通的桥梁&#xff0c;帮助产研团队减少信…

什么是深度数据包检测 (DPI)

随着混合工作成为生活的正常部分&#xff0c;新技术每天都在使用&#xff0c;同时总是通过网络传输数据的山体滑坡。通过高正常运行时间、快速解决问题和富有洞察力的情报提供无缝的用户体验至关重要。为此&#xff0c;对网络进行端到端监控非常重要。 深度数据包检测是一种用…

技术招聘漫谈 | 正在招Golang工程师的你,赶快收藏这份识人秘籍!

各位技术面试官&#xff0c;欢迎来到新一期的技术招聘漫谈专栏。 在前两期的专栏中&#xff0c;我们解析了前端工程师&#xff08;点击此处回顾&#xff09;以及 Java 工程师&#xff08;点击此处回顾&#xff09;这两个常见技术岗位的招聘技巧。 今天&#xff0c;我们想把目…

了解和使用 Docker 镜像仓库

前言 在上文 《了解和使用 Docker》 之后&#xff0c;反响不错&#xff0c;也上了热榜。本来是想直接整理一下容器编排工具 Docker Swarm 和 K8s 博文的&#xff0c;但是半路杀出了这个活动&#x1f602;&#xff0c;为表敬意&#xff0c;先参与一波吧。 本文主要介绍一下容…

【MyBatis】MyBatis中#{}与${}的区别是什么?

文章目录 前言一、彻底理解SQL注入二、关于 # { }三、关于$ { }四、Mybatis中#{}与${}的区别五、代码案例使用#{}案例使用$ {}案例 前言 在开发中使用Mybatis经常使用到#{}与${}&#xff0c;二者区别是&#xff1f;来总结一下。 在mybatis中动态 sql 是其主要特性之一&#x…

什么是现代化智慧型档案馆

近日&#xff0c;智慧档案馆建设的新闻热度不断攀升&#xff0c;你知道智慧档案馆是什么吗&#xff1f; ​智慧档案馆是指运用现代信息技术手段&#xff0c;对传统档案馆进行数字化转型&#xff0c;实现档案数字化存储、智能化检索和共享服务。通过数字化转型&#xff0c;不仅可…

< 免费体验ChatGPT:免费且好用,不用使用 “ 魔法 ”,一款功能强大且轻便的插件!webTab! >

免费且好用&#xff0c;不用使用 “ 魔法 ”&#xff0c;一款功能强大且轻便的插件&#xff01;webTab&#xff01; &#x1f449; 前言&#x1f449; 功能演示图&#x1f449; 使用经验分享&#x1f449; 如何安装webTab插件呢&#xff1f;往期内容 &#x1f4a8; tips&#x…

(转载)基于量子遗传算法的函数寻优算法(matlab实现)

8.1 理论基础 8.1.1 量子遗传算法概述 量子遗传算法(quantum genetic algorithm,QGA)是量子计算与遗传算法相结合的产物&#xff0c;是一种新发展起来的概率进化算法。遗传算法是处理复杂优化问题的一种方法&#xff0c;其基本思想是模拟生物进化的优胜劣汰规则与染色体的交…

太优雅了,公司项目终于用上了Spring状态机

1、什么是状态机 1.1 什么是状态 先来解释什么是“状态”&#xff08; State &#xff09;。现实事物是有不同状态的&#xff0c;例如一个自动门&#xff0c;就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机&#xff0c;也就是被描述的事物的状态的数量是有限…

【HTML 往日冒险 01】标签 元素 属性 注释 文本格式化 颜色 CSS

HTML 往日冒险日志01 说在前面重新开始基础标签 basic元素 elements属性 attributes标题&#xff0c;水平线以及注释 headings段落与折行 paragraphs样式 html_styles文本格式化 formatting注释 comments颜色 colorsCSS 说在前面 HTML 对于现在的我来说&#xff0c;熟悉又陌生…

实验室信息系统源码,LIS源码

实验室信息系统源码&#xff0c;LIS源码 技术细节&#xff1a; SaaS架构的Client/Server应用 体系结构&#xff1a;Client/Server架构 客户端&#xff1a;WPFWindows Forms 服务端&#xff1a;C# .Net 数据库&#xff1a;Oracle 接口技术&#xff1a;RESTful API HttpW…

深度学习环境搭建笔记(一):detectron2安装过程

文章目录 第一步 安装python第二步 安装pycocotools第三步 安装Torch和Torchvision第四步 安装fvcore第五步 安装detectron2第六步 开始安装 第一步 安装python cuda 10.2 环境下 conda create -n detectron python3.7 第二步 安装pycocotools 下载对应的pycocotools-window…

ESXI7.0安装Windows Server 2008 R2

1&#xff1a;使用VC正常建立虚拟机&#xff0c;前四项根据自己的时间情况选择&#xff0c;兼容性用默认的ESXI7.0U2及更高版本。 2&#xff1a;客户机操作系统选择Windows,客户机操作系统版本选择我们想安装的Windows Server 2008 R2(64位&#xff09; 3&#xff1a;自定义硬件…

LINUX使用问题记录

LINUX使用问题记录 linux 安装pylab报错 sudo apt-get install python3-matplotliblinux换源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bakvim 编辑 sources.list &#xff1a; $ sudo vim /etc/apt/sources.list 将 sources.list 中的内容替换如下 注意&#…

Vulkan Tutorial 7 纹理贴图

目录 23 图像 图片库 暂存缓冲区 纹理图像 布局转换 将缓冲区复制到图像上 准备纹理图像 传输屏障掩码 清除 24 图像视图和采样器 纹理图像视图 采样器 Anisotropy 设备特征 25 组合图像采样器 更新描述符 纹理坐标系 着色器 23 图像 添加纹理将涉及以下步骤&am…

如何快速手撕单例类?一文教会你

&#x1f468;‍&#x1f393;作者&#xff1a;bug菌 ✏️博客&#xff1a;CSDN、掘金、infoQ、51CTO等 &#x1f389;简介&#xff1a;CSDN|阿里云|华为云|51CTO等社区博客专家&#xff0c;历届博客之星Top30&#xff0c;掘金年度人气作者Top40&#xff0c;51CTO年度博主Top12…

数据结构与算法基础-学习-24-遍历之DFS(深度优先搜索)和BFS(广度优先搜索)

目录 一、遍历定义 二、遍历实质 三、DFS 四、BFS 五、宏定义 六、自定义类型 七、函数实现 1、DFS&#xff08;邻接矩阵实现&#xff09; 2、DFS&#xff08;邻接表实现&#xff09; 3、BFS&#xff08;邻接矩阵实现&#xff09; 4、BFS&#xff08;邻接表实现&…

在idea中创建maven

说明&#xff1a;maven是一款管理和构建java项目的工具&#xff0c;使用maven&#xff0c;可规范开发&#xff0c;提高开发效率&#xff1b;maven的安装参考&#xff1a;http://t.csdn.cn/623Ah 配置Maven环境 创建maven&#xff0c;先要做准备工作&#xff0c;把idea中的环境…

带你开发一个远程控制项目---->STM32+标准库+阿里云平台+传感器模块+远程显示-------之 MQTT连接阿里云平台

第一篇&#xff1a; (13条消息) 带你开发一个远程控制项目----&#xff1e;STM32标准库阿里云平台传感器模块远程显示。_海口飞鹏岛科技有限公司的博客-CSDN博客 第二篇&#xff1a; (13条消息) 带你开发一个远程控制项目----&#xff1e;STM32标准库阿里云平台传感器模块远程…