c语言编程题。。。。题如下。。。
某一比赛的规则如下,参数选手的人数为2n次方(参赛队员的编号为0到2n-1)。所有选手完成比赛后由裁判打分(没有两名选手的得分相同),相邻的两名选手的得分一一pk,淘汰掉...
某一比赛的规则如下,参数选手的人数为2n次方(参赛队员的编号为0到2n-1)。所有选手完成比赛后由裁判打分(没有两名选手的得分相同),相邻的两名选手的得分一一pk,淘汰掉得分低的选手。剩余的相邻选手再一一pk,直到只剩两名选手。进入最后一轮的两个选手pk后,分数高的为冠军,低的为亚军。
如一共有8名参赛队员,得分依次为
1 3 5 7 2 4 6 8
第一轮pk后,剩余的选手得分为
3 7 4 8
第二轮pk后,剩余的选手得分为
7 8
最后得到冠军的得分为8,他的编号为7。
问,亚军的编号是几,得分是多少?
输入要求
先输入一个整数n,表示有n组测试数据。
每组测试数据先输入一个整数m(m<=1024),表示有m个参数选手。
下一行输入m个整数,表示m个选手的得分。
输出要求
对每组测试数据,输出亚军的编号及其得分,中间用空格分开。
假如输入
3
8
1 3 5 7 2 4 6 8
4
1 2 3 4
2
100 101
应当输出
3 7
1 2
0 100 展开
如一共有8名参赛队员,得分依次为
1 3 5 7 2 4 6 8
第一轮pk后,剩余的选手得分为
3 7 4 8
第二轮pk后,剩余的选手得分为
7 8
最后得到冠军的得分为8,他的编号为7。
问,亚军的编号是几,得分是多少?
输入要求
先输入一个整数n,表示有n组测试数据。
每组测试数据先输入一个整数m(m<=1024),表示有m个参数选手。
下一行输入m个整数,表示m个选手的得分。
输出要求
对每组测试数据,输出亚军的编号及其得分,中间用空格分开。
假如输入
3
8
1 3 5 7 2 4 6 8
4
1 2 3 4
2
100 101
应当输出
3 7
1 2
0 100 展开
2个回答
展开全部
#include<stdio.h>
#include<stdlib.h>
typedef struct _Node
{
int id;
int score;
struct _Node* next;
struct _Node* prev;
} Node;
int main() {
int n;
scanf("%d", &n);
while(n--) {
int m, i;
scanf("%d", &m);
Node *head = (Node*)malloc(sizeof(Node)), *tail = head;
head->next = NULL;
head->prev = NULL;
for(i = 0; i < m; i++) {
Node *p = (Node*)malloc(sizeof(Node));
scanf("%d", &p->score);
p->id = i;
p->next = NULL;
p->prev = tail;
tail->next = p;
tail = p;
}
while(m > 2) {
Node *p;
for(p = head->next; p; p = p->next->next) {
if(p->score > p->next->score) {
p->next = p->next->next;
free(p->next->prev);
p->next->prev = p;
} else {
p->prev->next = p->next;
p->next->prev = p->prev;
free(p);
}
}
m >>= 1;
}
printf("%d %d\n", (head->next->score < head->next->next->score ? head->next->id : head->next->next->id),
(head->next->score < head->next->next->score ? head->next->score : head->next->next->score));
}
return 0;
}
输入:
3
8
1 3 5 7 2 4 6 8
4
1 2 3 4
2
100 101
输出:
3 7
1 2
0 100
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询