华为OD算法开发指导-比赛的冠亚季军

算法描述

存在N个运动员,他们的id编号为0到N-1,他们的实力值用N个正整数表示,其中,N的范围在3,10000,比赛的规则为,每轮相邻的运动员之间举行比赛,例如,id编号为0的运动员与id编号为1的运动员之间举行比赛,id编号为2的运动员与id编号为3的运动员之间举行比赛,以此类推,当N为奇数时,id编号为N-1的运动员直接晋级到下一轮比赛,运动员的实力值大者为胜,当运动员的实力值相等,则id编号小者为胜,直到最后一轮决赛,决出前三名的冠亚季军。

输入描述

输入一行N个正整数,表示N个远动员的实力值。

输出描述

输出前三名冠亚季军的id编号以及实力值。

测试用例

|--------------------------------------------------------------|
| 输入: 99 98 92 97 96 96 95 |
| 输出: TOP1,id:0,value:99 TOP2,id:4,value:96 TOP3,id:3,value:97 |

算法逻辑分析

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 使用二维数组记录参赛的运动员,二维数组的每个元素表示一个运动员,其数据结构:\[0,93,1,96,2,98],其中,0,93表示id编号为0的运动员的实力值是93,以此类推。 |
| 使用递归算法,每次递归表示举办一轮比赛,在每轮比赛中,循环地对相邻的运动员举行比赛,将胜者保存在二维数组中,保存的位置从二维数组的索引0开始计算,将该轮比赛的结果对应的二维数组以及运动员的总数传入到下一次的递归算法中,以此类推,最后一次递归比赛结束,返回包括冠亚季军的二维数组。 |
| 比赛条件判断,循环地对相邻的运动员举行比赛的时候,如果N为偶数,则循环的开始条件为0结束条件为N-1,如果N为奇数,循环的开始条件为0结束条件为N-2,N-1索引位置的运动员直接进入下一轮比赛。 胜负条件判断,运动员的实力值大者为胜,当运动员的实力值相等,则id编号小者为胜。 冠军条件判断,当N为3或者4,循环地对相邻运动员举行比赛,最后决出冠亚军。 季军条件判断,当N为3或者4,在二维数组的前3位或者4位运动员中,除去冠亚军,剩下的1位运动员或者2位运动员中的胜者为季军。 |

Java算法代码

主函数以及测试函数:

显示冠亚季军的信息:

初始化输入的运动员数据到指定的数据结构中:

比赛递归主函数:

比赛轮次主函数:

运动员比赛函数:

算法测试

12位运动员的测试数据:

13位运动员的测试数据:

20位运动员的测试数据:

相关推荐
普通攻击往后拉4 小时前
Leetcode 206. 反转链表
算法·leetcode·链表
@syh.4 小时前
【贪心】矩阵消除游戏
算法·游戏·矩阵
可编程芯片开发5 小时前
基于零极点配置的PID控制系统simulink建模与仿真
算法
徐小夕5 小时前
开源!我用SQLite + DuckDB打造了一款可视化AI问数平台
前端·算法·github
Hrain-AI5 小时前
2026 企业 AI 智能体平台横评:8 大主流平台 7 维度实测对比
人工智能·算法·机器学习
Angel Q.6 小时前
因子分析和生成模型有什么关系?从“幕后因素”到“生成数据”
算法
FBI HackerHarry浩8 小时前
AI大模型开发V2第四阶段线性回归
人工智能·算法·线性回归
Jerry9 小时前
LeetCode 108. 将有序数组转换为二叉搜索树
算法
蓝斯49710 小时前
Diff算法的简单介绍
算法