【蓝桥杯】【锦标赛】

 

 

题目

   如果要在n个数据中挑选出第一大和第二大的数据(要求输出数据所在位置和值),使用什么方法比较的次数最少?我们可以从体育锦标赛中受到启发。

   如图【1.png】所示,8个选手的锦标赛,先两两捉对比拼,淘汰一半。优胜者再两两比拼...直到决出第一名。

   第一名输出后,只要对黄色标示的位置重新比赛即可。

   下面的代码实现了这个算法(假设数据中没有相同值)。

   代码中需要用一个数组来表示图中的树(注意,这是个满二叉树, 不足需要补齐)。它不是存储数据本身,而是存储了数据的下标。   
   
   第一个数据输出后,它所在的位置被标识为-1

class A{
    //a 表示待处理的数据,长度如果不是2的次幂,则不足位置补为-1
static void pick(int[] a)
{
int n = 1;
while(n<a.length) n *= 2;


int[] b = new int[2*n-1];
for(int i=0; i<n; i++){ 
if(i<a.length) 
b[n-1+i] = i;
else
b[n-1+i] = -1;
}

//从最后一个向前处理
for(int i=b.length-1; i>0; i-=2){
if(b[i]<0){
if(b

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝桥杯是中国著名的计算机竞赛之一,包括蓝桥杯全国软件和信息技术专业人才大赛以及蓝桥杯全国青少年程序设计比赛。其中,蓝桥杯python选拔赛是为了选拔具有优秀python编程能力的参赛者而举办的赛事。 蓝桥杯python选拔赛注重考察参赛者对python语言的理解和应用能力。在比赛中的题目往往涵盖了python编程的各个方面,包括基本语法、数据结构、算法设计和程序设计思维等。选手需要在规定的时间内,按照题目要求,使用python语言编写解决方案。 参加蓝桥杯python选拔赛可以提高参赛者的编程能力和解决问题的能力。通过参加比赛,选手们可以接触到各种不同类型的编程题目,锻炼自己的编程思维和动手能力。同时,比赛还提供了一个交流和学习的平台,选手们可以与其他参赛者分享经验、学习别人的优秀解法,提高自己的编程水平。 此外,蓝桥杯python选拔赛还是选拔参加蓝桥杯全国软件和信息技术专业人才大赛的入场券。优秀的选手将有机会代表自己的学校或单位参赛,并在比赛中展示自己的才华。 总之,蓝桥杯python选拔赛是一个提高编程水平、展示自己才能的良好平台。参加比赛不仅可以锻炼自己的编程能力,还可以结识其他编程爱好者,促进学习和交流。相信通过努力和参与,每个选手都能在蓝桥杯python选拔赛中获得进步和收获。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值