您的位置:首页 > 其它

1032. 挖掘机技术哪家强

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

输入格式:

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

输出格式:

在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0

输出样例:
2 150


算法:

算法开始。
声明定义结构体,包括学校编号和比赛成绩。
读入参赛人数,i=0。
如果i>=参赛人数,则跳到第七步。
读入学校编号和比赛成绩。
i++。回到第四步。
用qsort()函数给该结构数组排序。
i=0。
如果i>=参赛人数,则跳到第十四步。
如果学校编号没有发生变化,则该参赛者成绩加到tmp中的分数中。跳到第十三步。
如果学校编号发生变化,则tmp中的分数与max中的分数进行比较,如果前者大于后者,则max=tmp。
tmp中的学校编号等于当前学校编号,tmp的成绩等于该参赛者的成绩。
i++,回到第九步。
输出学校编号和总成绩。
算法结束。

#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;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: