C语言例题(递归、二分查找、冒泡排序)

一、递归案例

有5个人坐在在一起,问第5个人多少岁?他说比第4个人大两岁。问第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个人大两岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大?

请使用递归完成以上问题的求解。

#include <stdio.h>
int getAge(int n){//如果n等于1,函数返回10。这表示第一个人(或者当n为1时)的年龄是10岁。if(n==1){return 10;}else{//(n-1)+2意思是,要想知道当前考虑的人n的年龄,就要先找到他前一个人(n-1)的年龄的基础上加2岁return getAge(n-1)+2;                 }
}
int main() {
// 基础条件:第一个人是10岁
// 递归条件:(n-1)+2
int res=getAge(5);
printf("%d",res);return 0;
}

二、二分查找案例

给定数组{1,3,6,12,45,67,89,93,96},使用二分查找求93的下标并输出。

#include <stdio.h>
int binSearch(int arr[],int len,int target){//左边界int left=0;//len-1,数组长度-1就是数组的最后一项,是右边界int right=len-1;//左边必须小于或者等于右边,条件才成立,不然就是超出边界while(left<=right){//计算中间位置 mid 来决定下一步搜索哪一半数组。简单的方法可能是直接使用 (left + right) / 2 来计算 mid,//但这种方法在 left 和 right 都很大时可能导致整数溢出。//为了避免这种情况,我们使用 left + (right - left) / 2 的公式。//这个公式首先计算 right 和 left 之间的差值,然后除以 2,最后再加上 left。//这样,即使 left 和 right 很大,它们的差值也不会太大,从而避免了整数溢出的问题。int mid=left+(right-left)/2;// if判断中间值,如果等于目标值,直接返回(return mid)目标值就okif(arr[mid]==target){return mid;// else if判断中间值是否小于目标值// 如果 arr[mid] 确实小于 target,说明目标值 target 必然在 mid 的右侧(即数组的后半部分)// 因为数组是有序的。因此,我们将搜索范围缩小到 mid 的右侧,即更新 left = mid + 1。}else if(arr[mid]<target){left=mid+1;// 如果 arr[mid] > target,则目标值 target 必然在 mid 的左侧(即数组的前半部分),// 因为数组是有序的。因此,我们将搜索范围缩小到 mid 的左侧,即更新 right = mid - 1。}else{right=mid-1;}}return -1;
}
int main() {int arr[]={1,3,6,12,45,67,89,93,96};int len=sizeof(arr)/sizeof(arr[0]);int target=12;int index=return 0;
}

三、冒泡排序

给定数组{3,93,67,96,45,6,89,93,12},对数组进行排序并输出。

#include <stdio.h>int main() {int arr[]={1,34,56,78,54,32,12,2,7};int len=sizeof(arr)/sizeof(arr[0]);
//外层循环控制排序的次数(五个数字排序就是对比四次,所以要len-1)for(int i=0;i<len-1;i++){
//内层循环控制循环趟数(每次循环一次就排除一个数字和下标,所以是len-i-1)for(int j=0;j<len-i-1;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}};
for(int i=0;i<len-1;i++){printf("%d\n",arr[i]);
}return 0;
}

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

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

相关文章

Vue2 移动端(H5)项目封装弹窗组件

前言 因vant-ui的dialog组件没有自定义footer插槽 效果 参数配置 1、代码示例&#xff1a; <t-dialog :visible.sync"show" :title"title" submit"submit"></t-dialog>2、配置参数&#xff08;t-dialog Attributes&#xff09; 参…

IS62C256AL-45TLI功能参数介绍及如何优化性能

IS62C256AL-45TLI功能和参数介绍及如何优化性能-公司新闻-配芯易-深圳市亚泰盈科电子有限公司 产品品种:静态随机存取存储器 RoHS:是 存储容量:256 kbit 组织:32 k x 8 访问时刻:45 ns 接口类型:Parallel 电源电压-最大:5.5 V 电源电压-最小:4.5 V 电源电流—最大值:25 mA 最小…

python内置函数help()详解

Python 内置函数 help() 1. 概述 help() 是 Python 中的一个内置函数&#xff0c;它提供了一个非常有用的帮助系统。通过这个函数&#xff0c;我们可以获取模块、类、方法、函数等对象的详细帮助信息。这些信息通常包括对象的文档字符串&#xff08;docstring&#xff09;、参…

JumpServer搭建堡垒机实战

文章目录 第一步、下载安装第二步、访问异常处理【1】docker方式拉取失败 JumpServer是运维人员可连接内部服务器上进行操作&#xff0c;支持Linux等操作系统的管理工具。 第一步、下载安装 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/…

OpenCV-复数矩阵点乘ComplexMatrixDotMultiplication

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 需求说明 一般用到FFT&#xff0c;就涉及到复数的计算&#xff0c;为了便于调用&#xff0c;我自行封装了一个简单的复数矩阵点乘…

Flutter本地化存储介绍与使用

Flutter提供了多种本地化存储方案&#xff0c;可满足不同应用场景的需求。本文将介绍Flutter中常用的本地化存储方案&#xff0c;并演示如何使用它们存储和读取数据。 1. SharedPreferences SharedPreferences是Flutter中最常用的本地化存储方案之一&#xff0c;它用于存储键…

rror while loading shared libraries: libssl.so.10 亲测有效

wget https://vault.centos.org/centos/8/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-3.el8.x86_64.rpm rpm -ivh compat-openssl10-1.0.2o-3.el8.x86_64.rpm

如何用网页绘制一个黑莓9900的键盘效果图

如何用网页绘制一个黑莓9900的键盘效果图 入了几个黑莓蓝牙键盘&#xff0c;出于喜好&#xff0c;想做一个跟实体键盘一模一样的网页界面。 最终的实现效果是这样的&#xff1a; 在线查看&#xff1a;http://kylebing.cn/tools/bb-keyboard 点击上面四个按键显示不同模型界面…

各种指标计算

字错误率&#xff08;cer&#xff09; 使用于中文等不以空格为分隔的语言 import evaluatemetric evaluate.load("cer") print(metric.compute(predictions[你吃了吗, 今天我要去打篮球], references["我吃了么a" , 明天我要去打篮球])) 词错误率&…

PyQt介绍——动画使用详解之动画组QAnimationGroup

QAnimationGroup&#xff1a;动画组&#xff0c;可以包含多个动画&#xff0c;可以包含子动画组。 QSequentialAnimationGroup&#xff1a;顺序动画组&#xff0c;按照添加的顺序依次执行动画。 QParallelAnimationGroup&#xff1a;并行动画组&#xff0c;所有动画一起执行。…

Linux 网络操作命令Telnet

Telnet 尽管 Telnet 已经逐渐被更安全的 SSH 协议所取代&#xff0c;但在某些特定场景下&#xff0c;如对旧系统的维护或教育目的&#xff0c;Telnet 仍然有其使用价值。本文将介绍如何在 Linux 系统中安装 Telnet 客户端&#xff0c;以及如何使用它进行远程登录。 用户使用 t…

Activiti——将绘制的流程图存入act数据库并进行流程推进与状态流转

文章目录 前言流程图入库操作 RepositoryService项目结构数据库连接配置文件入库Java测试代码zip 方式进行流程的批量部署 流程启动 RuntimeService待处理任务查看 TaskService流程状态的扭转查询流程定义信息 RepositoryService查询正在执行的流程实例 RuntimeService已部署流…

Springboot+Vue项目-基于Java+MySQL的在线文档管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

实测14us,Linux-RT实时性能及开发案例分享—基于全志T507-H国产平台

本文带来的是基于全志T507-H&#xff08;硬件平台&#xff1a;创龙科技TLT507-EVM评估板&#xff09;&#xff0c;Linux-RT内核的硬件GPIO输入和输出实时性测试及应用开发案例的分享。本次演示的开发环境如下&#xff1a; Windows开发环境&#xff1a;Windows 7 64bit、Window…

在 Linux 上通过 udev 规则绑定 ttyUSB 设备的相对地址

文章目录 问题描述解决方案1. 分辨当前 USB 设备的绝对地址2. 使用绝对地址查看设备属性3. 使用 udev 规则绑定设备到相对地址3.1. 区分多个不同型号 USB 设备3.2. 区分多个相同型号 USB 设备 问题描述 Linux 系统开机时会随机为连接的 USB 设备随机分配 /dev/ttyUSB* 这样的绝…

java学习之路-抽象类和接口

目录 前言 1.抽象类 1.2抽象类语法 1.3抽象类特性 1.4抽象类的作用 2.接口 2.1接口概念 2.2接口的定义 2.3接口的使用 接口使用栗子 2.4接口特性 2.5 实现多个接口 请看栗子 2.6接口间的继承 2.7接口使用实例 2.8Clonable 接口和深浅拷贝 2.9 抽象类和接口的区别…

前端网络---网络安全

「前端食堂」想进大厂必须要知道的Web安全问题 - 掘金 网络安全之xss攻击 XSS 攻击是跨站脚本攻击&#xff0c;是一种代码注入攻击。攻击者通过在网站注入恶意脚本&#xff0c;使之在用户的浏览器上运行&#xff0c;从而盗取用户的信息如 cookie 等。 XSS 的本质是因为网站没有…

Unity中Socket,Tcp,Udp网络连接协议总结

Socket连接 Socket连接介绍 这里Socket先使用Tcp协议同步连接&#xff0c;Tcp协议作为稳定协议,在消息发送前必须完成客户端连接,且客户端连接在Tcp协议中只能是一对一的,即如果有ABC三个连接,那个A连接与B连接如果相互连接,则A与C之间则无法互相通信,只能由A接受到消息时创建…

spring全局异常处理类ExceptionHandler获取request入参

背景 项目中需要用到的数据校验、异常捕获&#xff0c;所以会用ExceptionHandler方法&#xff0c;对Controller做统一的全局异常处理。当发生异常时&#xff0c;需要记录异常的url、入参、出参、错误信息等。但是request的inputStream已经读取过一次&#xff0c;此时拿到的req…

华为是如何开经营分析会的?

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 企业不可避免开各种会议&#xff0c;而其中经营分析会对于企业发展至关重要。该会议主要是对企业经营目标进行复盘&#xff0c;需要公司全体上下共同重视&#xff0c;其目的是让企业集中力量&#xff0c;解…