1032. 挖掘机技术哪家强

来源:互联网 发布:ubuntu如何使用cd命令 编辑:程序博客网 时间:2024/04/19 01:47

为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

输入格式:

输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。

输出格式:

在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。

输入样例:
63 652 801 1002 703 403 0
输出样例:
2 150
算法:
  1. 算法开始。
  2. 声明定义结构体,包括学校编号和比赛成绩。
  3. 读入参赛人数,i=0。
  4. 如果i>=参赛人数,则跳到第七步。
  5. 读入学校编号和比赛成绩。
  6. i++。回到第四步。
  7. 用qsort()函数给该结构数组排序。
  8. i=0。
  9. 如果i>=参赛人数,则跳到第十四步。
  10. 如果学校编号没有发生变化,则该参赛者成绩加到tmp中的分数中。跳到第十三步。
  11. 如果学校编号发生变化,则tmp中的分数与max中的分数进行比较,如果前者大于后者,则max=tmp。
  12. tmp中的学校编号等于当前学校编号,tmp的成绩等于该参赛者的成绩。
  13. i++,回到第九步。
  14. 输出学校编号和总成绩。
  15. 算法结束。

#include <stdio.h>#include <stdlib.h>typedef struct{    int index;    int grade;}competitor;int cmp(const void* v1, const void* v2);int main(int argc, const char * argv[]) {    int n,i;    competitor* ptr;    competitor tmp={0}, max={0};    scanf("%d",&n);    ptr=(competitor*)calloc(n, sizeof(competitor));    for(i=0;i<n;i++){        scanf("%d %d", &(ptr[i].index), &(ptr[i].grade));    }    qsort(ptr, n, sizeof(competitor), cmp);    for(i=0; i<n; i++){        if(i==0){            tmp.index=ptr[i].index;            tmp.grade=ptr[i].grade;        }        else if(tmp.index==ptr[i].index){            tmp.grade+=ptr[i].grade;        }        else if(tmp.index!=ptr[i].index){            if(max.grade<=tmp.grade){                max=tmp;            }            tmp.index=ptr[i].index;            tmp.grade=ptr[i].grade;        }    }    if(tmp.grade>max.grade){        max=tmp;    }    printf("%d %d", max.index, max.grade);    return 0;}int cmp(const void* v1, const void* v2){    if(((competitor*)v1)->index>((competitor*)v2)->index){        return 1;    }    else if(((competitor*)v1)->index==((competitor*)v2)->index){        return 0;    }    else{        return -1;    }}


0 0
原创粉丝点击