0
点赞
收藏
分享

微信扫一扫

问题 B: 运动会项目积分排名

绪风 2022-04-29 阅读 57
c++算法

题目描述

根据学校参加运动会项目的积分情况,计算每个学校所获得的总积分,按照积分高低输出学校以及学校积分。

输入

输入包括多行数据,每行数据依次是学校名称 项目名称 选手姓名 成绩 积分
学校总数不超过10个,学校名称、项目名称和选手姓名是字符串形式,不超过50个字符,成绩为浮点型数据,积分为整数,大于等于0,小于等于10

输出

按照学校获得积分降序排列,每个学校一行,输出学校名称 积分

样例输入 复制

北化 跳高 张三 1.7 7
北大 跳高 李四 1.55 3

样例输出 复制

北化 7
北大 3

俺滴农村方法就是用结构体,然后再排序,

#include<bits/stdc++.h>
using namespace std;

struct compete{
	string school;
	float credit;
	bool godie;
}a[1000];

int sort1(compete a,compete b)
{
	return a.school<b.school;
}

int sort2(compete a,compete b)
{
	return a.credit>b.credit;
}

int main()
{
	string school;
	string sport;
	string name;
	float score;
	float credit;
	int temp=0;
	while(cin>>school>>sport>>name>>score>>credit)
	{
		a[temp].school=school;
		a[temp].credit=credit;
		temp++;
	}
	sort(a,a+temp,sort1);
	for(int i=0;i<temp;i++)
	{
		if(a[i].school==a[i+1].school)
		{
			a[i+1].credit+=a[i].credit;
			a[i].godie=true;
		}
	}
	sort(a,a+temp,sort2);
	for(int i=0;i<temp;i++)
	if(!a[i].godie)
	cout<<a[i].school<<" "<<a[i].credit<<endl;
}

再看看老湿的城里人用的方法:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    map<string,int>mp;
    string school,project,name;
    double grade;
    int score;
    while(cin>>school>>project>>name>>grade>>score)
    {
        if(mp.find(school)==mp.end())
        mp[school]=0;
        mp[school]+=score;
    }
    while(mp.size()>0)
    {
        map<string,int>::iterator itMax=mp.begin();
        for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++)
        {
            if(it->second>itMax->second)
            {
                itMax=it;
            }
        }
        cout<<itMax->first<<" "<<itMax->second<<endl;
        mp.erase(itMax);
    }
    return 0;
}

 我的方法虽土,但是好理解呀!

 

 

举报

相关推荐

0 条评论