C语言--输入10个数字,要求输出其中值最大的元素和该数字是第几个数

news2024/11/18 8:48:58

 今天小编带大家了解一下什么是“打擂台”算法。


一.思路分析

可以定义一个数组arr,长度为10,用来存放10个数字,设计一个函数Max,用来求两个数中的较大值, 定义一个临时变量tmp=arr[0],保存临时最大的值,下标是index,然后进行两两比较,如果下一个数组元素比临时最大值大,那么就把tmp换成新的数值。并记录下它的下标,最后剩下来的临时最大值就是整个数组中的临时最大值。


二.打擂台算法(了解即可)  

背景:拳击比赛中,先选出一个擂主,然后挑战者来挑战,如果成功 ,那么挑战者成为新的擂主,否则擂主捍卫成功,当所有挑战者都挑战完成后,那么最后的那个擂主就是最强的

同样的,本题中,先让arr[0]成为擂主,然后依次让arr[1],arr[2]...arr[10],进行比较大小,如果arr[0]<arr[1],那么擂主让给arr[1],即tmp=arr[1],并保存下它的下标1。依次类推,直到选到最大的数字。

.打擂台算法(Tournament algorithm),也被称为淘汰赛算法,是一种用于解决最值问题的算法。它通过将问题的输入从不同的角度进行两两比较,从而找到最大值或最小值。

下面以找出数组中的最大值为例来解释打擂台算法:

1. 将待比较的元素按照一定的规则进行分组。例如,将数组中的元素两两分组进行比较,如果数组个数为奇数,则最后一个元素被单独分组。

2. 在每个分组中进行比较,并记录每组的胜者。比较的方式可以是简单的大小比较,或者根据特定的条件进行比较。

3. 将每个分组的胜者再次组成新的分组,继续进行两两比较,直到只剩下一个胜者。

4. 最后,剩下的那个胜者就是数组中的最大值。

这个算法的特点是通过不断地比较和淘汰,逐渐缩小了待比较的范围,最终找到了最大值(或最小值)。

打擂台算法的时间复杂度为O(log n),其中n是输入元素的个数。它的效率非常高,尤其适用于需要找到最值的场景,如数组中的最大值、最小值等。

需要注意的是,打擂台算法通常需要满足比较的元素具有传递性,即如果元素A比元素B大,元素B比元素C大,则元素A必定比元素C大。否则,算法可能得不到正确的结果。


三.图解


 四.代码分析

  • 定义出最大值函数
int Max(int a, int b)
{
	return a > b ? a : b;
}

  •  定义出数组,并从键盘获取10个数字
	int arr[10] = { 0 };
	printf("请输入10个数字\n");
	int len = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0;i < len;i++)
	{
		printf("请输入第%d个数字 :", i + 1);
		scanf("%d", &arr[i]);
	}

  • 定义出“擂主”,并进行比赛,并保存新的擂主信息
	int tmp = arr[0];//临时最大值
	int index = 0;//保存临时最大值的下标
	for (int i = 1;i < len;i++)
	{
		if (Max(arr[i], tmp) > tmp)
		{
			tmp = arr[i];//把当前最大值赋给临时最大值
			index = i;//保存临时最大值的下标
		}
	}

  • 输出
	printf("最大值是%d,是第%d个数字", tmp, index + 1);

五.完整代码

int Max(int a, int b)
{
	return a > b ? a : b;
}
int main()
{
	int arr[10] = { 0 };
	printf("请输入10个数字\n");
	int len = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0;i < len;i++)
	{
		printf("请输入第%d个数字 :", i + 1);
		scanf("%d", &arr[i]);
	}
	int tmp = arr[0];//临时最大值
	int index = 0;//保存临时最大值的下标
	for (int i = 1;i < len;i++)
	{
		if (Max(arr[i], tmp) > tmp)
		{
			tmp = arr[i];//把当前最大值赋给临时最大值
			index = i;//保存临时最大值的下标
		}
	}
	printf("最大值是%d,是第%d个数字", tmp, index + 1);
	return 0;
}


 六.运行结果


创作不易, 如果这份博客👍对你有帮助,可以给博主一个免费的点赞以示鼓励。
欢迎各位帅哥美女点赞👍评论⭐收藏⭐,谢谢!!!
如果有什么疑问或不同的见解,欢迎在评论区留言哦👀。
祝各位生活愉快⭐

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

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

相关文章

邻接表储存图实现广度优先遍历(C++)

目录 基本要求&#xff1a; 邻接表的结构体&#xff1a; 图的邻接表创建&#xff1a; 图的广度优先遍历&#xff08;BFS&#xff09;&#xff1a; 邻接表的打印输出&#xff1a; 完整代码&#xff1a; 测试数据&#xff1a; 结果运行&#xff1a; 通过给出的图的顶点和…

归并排序 merge Sort + 图解 + 递归 / 非递归

归并排序(merge sort)的主要思想是&#xff1a;将若干个有序序列逐步归并&#xff0c;最终归并为一个有序序列二路归并排序(2-way merge sort)是归并排序中最简单的排序方法 &#xff08;1&#xff09;二路归并排序的递归实现 // 二路归并排序的递归实现 void merge(vector&l…

EFCore: The ConnectionString property has not been initialized.

使用NuGet的程序包管理控制台执行命令“update-database”的时候报出该错误 经过检查发现是optionsBuilder.UseSqlServer(strConn);中的strConn没有写

数据库01-慢查询优化

目录 MySQL优化 慢查询 如何定位慢查询&#xff1f; 如何分析慢查询&#xff1f; MySQL优化 MySQL 优化是数据库管理和应用性能调优的一个重要方面。以下是一些常规性的 MySQL 优化经验和适用场景&#xff1a; 索引优化&#xff1a; 确保表的字段上有适当的索引&#xff0…

计算机毕业设计选题推荐-农产品销售微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

C语言全部关键字解析

前言 C语言具有以下关键字&#xff1a; 这些关键字如下: 关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile 对于这些关键字&#xff0c;大…

牛客网刷题笔记131111 Python实现LRU+二叉树先中后序打印+SQL并列排序

从学校步入职场一年多&#xff0c;已经很久没刷过题了&#xff0c;为后续稍微做些提前的准备&#xff0c;还是重新开始刷刷题。 从未做过计划表&#xff0c;这回倒是做了个计划表&#xff0c;希望能坚持吧。 刷题比较随性且量级不大&#xff0c;今天就写了2个算法2个sql&#x…

第四节(2):修改WORD中表格数据的方案

《VBA信息获取与处理》教程(10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件

Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法—使用布局、Spacer等控件 Chapter1 Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法—使用布局、Spacer等控件Chapter2 Qt Creator中布局器详解01. 概述02. 开发环境03. 布局器概述04. 布局属性设置05. 弹簧条属性…

简单版本管理服务编写

说明: 制作android应用内更新的时候&#xff0c;经常会用到版本检查&#xff0c;下载&#xff0c;安装&#xff0c;这时候需要写一个版本管理服务。 本文说明了自己编写版本服务的简单经过。 解决方案: 该软件实现如下功能&#xff1a; 创建后台接口&#xff1a;版本软件上传…

基于PHP的设云尘资讯网站设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

保姆级自定义GPTs教程,无需任何代码!

11月10日&#xff0c;OpenAI正式宣布向所有ChatGPT Plus用户开放GPTs功能&#xff0c;一个人人都能开发自定义ChatGPT助手的时代降临。 GPTs支持无代码、可视化点击操作&#xff0c;这意味着即便你没有任何编程经验&#xff0c;只要有数据、脑洞大开的想法&#xff0c;就能开发…

探索微信小程序框架的精华——高质量的优秀选择

目录 引言&#xff1a; 1. 框架性能 2. 开发者工具支持 3. 文档和社区支持 4. 扩展能力 5. 使用率和稳定性 结语&#xff1a; 引言&#xff1a; 微信小程序作为一种轻量级、高效便捷的应用形式&#xff0c;已经在移动应用领域占据了重要地位。而其中&#xff0c;选择一个…

PostMan授权认证使用

Authorization 对于很多应用&#xff0c;出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制。 授权过程验证您是否具有访问服务器所需数据的权限。 当发送请求时&#xff0c;通常必须包含参数&#xff0c;以确保请求具有访问和返回所需数据…

C/C++数据结构之链表题目答案与解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.题目…

C++学习笔记(二):C++是如何运行的

C是如何运行的 include 预处理语句&#xff0c;在编译前就会被处理。 main函数 程序入口。 #include <iostream>int main() {std::cout << "Hello World!" << std::endl;std::cin.get();return 0; }Visual Studio 解决方案平台指的是编译的代码的…

从零开始开发抖音小程序:与餐饮团购的完美融合

本文将探讨如何从零开始开发一个创新的抖音小程序&#xff0c;以其独特的特性与餐饮团购进行完美融合。 一、什么是抖音小程序&#xff1f; 抖音小程序为开发者提供了在用户观看视频时进行无缝体验的机会。通过借助抖音的庞大用户基础&#xff0c;开发者可以将自己的创意呈现给…

python3GUI--QQ音乐By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示0.播放页1.主界面1.精选2.有声电台3.排行4.歌手5.歌单 2.推荐3.视频1.视频2.分类3.视频分类 4.雷达5.我喜欢1.歌曲2.歌手 6.本地&下载7.最近播放8.歌单1.一般歌单2.自建歌单3.排行榜 9.其他1.搜索词推荐2.搜索结果 三&#x…

Vuex持久化插件

Vuex数据默认是存储在内存中的&#xff0c;当然我们也可以将它存储在Local Storage&#xff0c;也可以指定某些数据存储在Local Storage 这样我们就用到了Vuex持久化插件vuex-persistedstate 安装vuex-persistedstate插件 npm install vuex-persistedstate --save 案列&#x…