本文主要是介绍问题 B: 运动会项目积分排名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
根据学校参加运动会项目的积分情况,计算每个学校所获得的总积分,按照积分高低输出学校以及学校积分。
输入
输入包括多行数据,每行数据依次是学校名称 项目名称 选手姓名 成绩 积分
学校总数不超过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;
}
我的方法虽土,但是好理解呀!
这篇关于问题 B: 运动会项目积分排名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!