1234567

liguoguo 2024-01-06 19:21:35

题目描述 给定一个长度为 的整数数组 ,我们可以用一种递归的方法来找出数组中的一个数,作为该数组“最终的赢家”。

具体的方法是这样的:

如果数组中只有一个元素,那么它就是该数组的“赢家”; 否则,我们把数组分成左右两个等长的部分,分别求出两个部分的“赢家”,然后让这两个“赢家”进行一次比较,较大者就是整个数组的“赢家”; 保证每次分组时,当前数组一定可以分为等长的两个部分; 若左右两个部分的“赢家”相等,则左侧“赢家”做整个数组的“赢家”。 我们把每次比较的结果称为一场擂台赛,把每个部分的最大值称为该部分的赢家。请你编写一个函数 winner(a, q, len) (函数含义为:处理数组 起点为 且长度为 的区域)来实现这个功能,并按照上述递归的顺序输出每场擂台赛的结果,以及该数组“最终的赢家”。

输入格式 第一行输入一个正整数 ,表示数组的长度,且 一定为 的幂。

第二行输入 个用空格隔开的整数 ,表示数组中的元素。

输出格式 输出若干行,每行表示一场擂台赛的结果,格式为 winner vs loser,其中 winner 是赢家,loser 是输家。输出的顺序应该按照擂台赛发生的先后顺序。最后一行输出整个数组”最终的赢家“。

样例 样例输入 #1 8 3 5 2 7 9 4 6 8 样例输出 #1 5 vs 3 7 vs 2 7 vs 5 9 vs 4 8 vs 6 9 vs 8 9 vs 7 9 样例输入 #2 1 -29 样例输出 #2 -29 样例输入 #3 4 -7 2 11 7 样例输出 #3 2 vs -7 11 vs 7 11 vs 2 11