注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

按绩点排名  

2014-03-17 22:14:05|  分类: STL ACM |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

按绩点排名


有一些班级的学生需要按绩点计算并排名。每门课程的成绩只有在 60 分以上(含),
才予以计算绩点。课程绩点的计算公式为:(课程成绩–50)÷10×学分数。一个学生的总绩点
为其所有课程绩点总和除以 10。
输入描述:输入数据中含有一些班级(数量≤20)。每个班级的第一行数据 n(≤10),
a1,a2,a3,…,an,表示该班级共有 n 门课程,每门课程的学分分别为 a1,a2,a3,…,
an;班级数据中的第二行数据为一个整数 m(≤50),表示本班级有 m 个学生;班级数据
接下去有 m 行对应 m 个学生数据;每行学生数据中的第一个为字串 s1(s1中间没有空格),
表示学生姓名,后面跟有n个整数s1,s2,s3,…,sn,表示该学生各门课程的成绩(0≤si≤100)。
输出描述:以班级为单位输出各个学生按绩点分从大到小的排名。如果绩点分相同,
则按学生名字的 ASCII 串值从小到大排名。每个班级的排名输出之前应先给出一行,描述
班级序号“class #:”(#表示班级序号),班级之间应空出一行。排名时,每个学生占一行,
列出名字和总绩点。学生输出宽度为 10 个字符,左对齐,在空出一格后列出总绩点。
输入样例
1
3 3 4 3
3
张三 89 62 71
Smith 98 50 80
王五 67 88 91
输出样例
class 1:
王五
3.26
Smith
2.34
张三
2.28
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <IOMANIP>//cout 的输出格式
using namespace std;
struct student
{
string s;
double d;
};
//编写比较函数
bool myComp(const student &s1,const student &s2)
{
if(s1.d!=s2.d)return s1.d>s2.d;//由大到小则使用“>”号
if(s1.s!=s2.s)return s1.s<s2.s;//由小到大则使用“<”号
}
int main(int argc, char* argv[])
{
ifstream cin("aaa.txt");
int n;//班级数量
int c;//课程数量
double xf;//学分
vector<double>vxf;//学分向量
int p;//班级人数
string name;//学生名称
double score;//成绩
student xs;//学生名称与总学分结构体
vector<student>vxs;//最终学生名称与总学分
cin>>n;//n 个班
for(int i=0;i<n;i++)//处理每一个班
{
cin>>c;//读入课程数量
for(int j=0;j<c;j++)//读入每门课程的学分
{
cin>>xf;
vxf.push_back(xf);
}
cin>>p;//读入班级人数
//读入一个班的 p 个学生的名称与每门课成绩
for(int k=0;k<p;k++)
{
cin>>name;//读入学生名称
xs.s=name;
xf=0.0;
for(int m=0;m<c;m++)//读入每门课程的分数
{
cin>>score;
//成绩要大于或等于 60 分才计算绩点
if(score<60)continue;
xf=xf+(score-50)/10*vxf[m];//计算总学分
}
xs.d=xf/10;
vxs.push_back(xs);
}
//输出每个班的情况
cout<<(i?"\n":"");
cout<<"class "<<i+1<<":"<<endl;
sort(vxs.begin(),vxs.end(),myComp);//带自定义比较函数 myComp
for(vector<student>::iterator it=vxs.begin();it<vxs.end();it++)
{
cout<<fixed<<setprecision(2);
cout<<left<<setw(11);
cout<<(*it).s<<(*it).d<<endl;
}
vxf.clear();//清除向量
vxs.clear();//清除向量
}
return 0;
}

  评论这张
 
阅读(7)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017