| |
|
开发:
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语言】剔除最大最小值后,计算数组元素的平均值 |
双11也不能阻挡我学习的心! 问题引入
输入样例:
输出样例:
理解1一般人看到这种题目,下意识会认为是去掉一个最大值一个最小值,再计算数组其他元素的最大值 毕竟很多体育赛事都是这么计算选手的得分的 实际上这道题并不是这么要求的,这点我们后面再提 先来看看如何去掉数组中的一个最大值、一个最小值吧! 去除一个最大/最小值先理清思路
想清楚这两点后,方法就很明确了 之前我写过一篇博客,有关如何查找数组中最大值的 [链接] 这里我们就能用上那个博客里面的方法,不过是以自定义函数的方式实现
找出最小值的代码同上,只需要将其中的>更改为< 在main函数中,我们需要设立两个变量来接收得到的最大值和最小值的下标
在最后计算sum的时候,只需要用if语句让K不等于最大值和最小值的下标,就能剔除这两个值 同时,我们的平均数也只需要除以8即可 运行结果键入数组中元素1-10,程序成功的输出了剔除1和10之后8个元素的平均值 但当我们把题目示例输进去时,得出的答案却和题目要求不同 题目实际要求上面提到,这道题的要求并不是只剔除一个最大值和最小值 而是剔除所有的最大值和最小值
观察输入样例可以发现,这10个数字的最大值是6,最小值是2 但是不管是最小值2和最大值6,都不止一个 题目要求的就是要将这里面的所有2和6剔除掉,再计算剩余数据的平均值 解题思路1&2对上面的代码进行优化,以循环的方式继续寻找最大值的下标
或 更改代码,在找到最大值下标后,查找数组中有几个元素同这个最大值相同,再返回他们的下标
解题思路3 -冒泡排序先对数组进行冒泡排序,再剔除两边的最大值和最小值 这里我选择的就是解题思路3 冒泡排序的方式可以参考我之前的博客 [链接] 这里只贴出主函数内需要编写的内容 计数器因为需要剔除多个最大(小)值 所以这里我们需要用一个变量进行计数 每当我们找到和已知最大值相同的数字的时候,count都会++(初值为1) 当循环走到第一个小于最大值的数后,循环就会终止
查找最小值的代码同上,但是for循环中的条件需要更改 注意,这里的下标k必须从8开始而不是从9 因为经过冒泡排序后,arr[9]本身就是数组中的最大值 若从它开始循环判断,就会直接把最大值赋值为0 程序就出bug了 主函数代码
在最后计算平均数的时候,我们需要剔除count1和count2(10减去后即为剩余元素的个数) 这时候得出的答案就和题目所给示例相同了 你学废了嘛?反正我是废了 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 10:31:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |