zjut 1205

按绩点排名  Time Limit:2000MS  Memory Limit:32768K

Description:

有一些班级的学生需要按绩点计算并排名。 每门课程的成绩只有在60分以上(含),才予以计算绩点。课程绩点的计算公式为: (课程成绩 – 50)÷10×学分数 一个学生的总绩点为其所有课程绩点总和除以10。

Input:

输入数据中含有一些班级(≤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)。

Output:

以班级为单位输出各个学生按绩点分从大到小的排名。如果绩点分相同,则按学生名字的ASCII串值从小到大排名。 每个班级的排名输出之前应先给出一行,描述班级序号“class #:”(#表示班级序号),班级之间应空出一行。 排名时,每个学生占一行,列出名字和总绩点。学生输出宽度为10个字符,左对齐,在空出一格后列出总绩点。

Sample Input:

1
3 3 4 3
3
张三   89 62 71
smith 98 50 80
王五   67 88 91

Sample Output:

class 1:
王五        3.26
smith     2.34
张三        2.28
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
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 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;
        for(int k=0;k<p;k++)
        {
            cin>>name;//读入学生名称
            xs.s=name;
            xf=0.0;
            for(int m=0;m<c;m++)
            {
                cin>>score;
                if(score<60) continue;
                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);
        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;
}

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <iomanip>
using namespace std;
struct cj
{
 string name;
 double jd;
}temp;
bool cmp(cj a,cj b)
{
 if(a.jd!=b.jd) return a.jd>b.jd;
 else if(a.name!=b.name) return a.name <b.name;
}
int main(int argc, char *argv[])
{
 int n,cl;
 cin >>n;//班级数
 for(cl=1;cl<=n;cl++)
 {
  vector<cj> s;//学生姓名和绩点
  int j,m;
  double t;
  cin>>m;//科目数
  vector<double> sc;//学分
  for(j=0;j<m;j++)
  {
   cin>>t;
   sc.push_back(t);
  }
  int i,q,k;
  cin>>q;//学生人数
   vector<double> ssc;//学生每课成绩
   for (k=0;k<q;k++)//进行每个同学的信息录入
  {
   cin>>temp.name;
   for(j=0;j<m;j++)
   {
    cin>>t;
    ssc.push_back(t);
   }
   temp.jd=0;
   for(j=0;j<m;j++)//进行绩点的计算
   {
    if(ssc[j]<60)continue;
    temp.jd+=(ssc[j]-50.0)/10.0*sc[j];
   }
   ssc.clear();
   temp.jd/=10;
   s.push_back(temp);
  }
  sort(s.begin(),s.end(),cmp);
  cout<<(cl==1?"":"\n");
  cout<<"class "<<cl<<":"<<endl;
  for(i=0;i<q;i++)
   cout<<left<<setw(10)<<s[i].name<<" "<<fixed<<setprecision(2)<<s[i].jd<<endl;
  sc.clear();s.clear();
 }
 return 0;
}

zjut 1205,布布扣,bubuko.com

时间: 2024-11-05 16:06:36

zjut 1205的相关文章

zjut 1044 按1的个数排序

按1的个数排序  Time Limit:1000MS  Memory Limit:32768K Description: 有一些01字串,将其按1的个数的多少的顺序进行输出. Sample Input: 10011111 00001101 1010101 1 0 1100 Sample Output: 0 1 1100 00001101 1010101 10011111 #include <stdio.h> #include <stdlib.h> #include <stri

九度 1205

#include <cstdio> #include <iostream> using namespace std; #ifdef ONLINE_JUDGE #define FINPUT(file) 0 #define FOUTPUT(file) 0 #else #define FINPUT(file) freopen(file,"r",stdin) #define FOUTPUT(file) freopen(file,"w",stdout)

HDU 6168 - Numbers | 2017 ZJUT Multi-University Training 9

/* HDU 6168 - Numbers [ 思维 ] | 2017 ZJUT Multi-University Training 9 题意: .... 分析: 全放入multiset 从小到大,慢慢筛 */ #include <bits/stdc++.h> using namespace std; const int N = 125250; int n, s[N]; int a[N], cnt; multiset<int> st; multiset<int>::it

HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9

/* HDU 6170 - Two strings [ DP ] | 2017 ZJUT Multi-University Training 9 题意: 定义*可以匹配任意长度,.可以匹配任意字符,问两串是否匹配 分析: dp[i][j] 代表B[i] 到 A[j]全部匹配 然后根据三种匹配类型分类讨论,可以从i推到i+1 复杂度O(n^2) */ #include <bits/stdc++.h> using namespace std; const int N = 2505; int t;

51nod 1205 流水线调度

1205 流水线调度 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 N个作业{1,2,-,n}要在由2台机器M1和M2组成的流水线上完成加工.每个作业加工的顺序都是先在M1上加工,然后在M2上加工.M1和M2加工作业i所需的时间分别为a[i]和b[i].你可以安排每个作业的执行顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少.求这个最少的时间. Input 第1行:1个数N,表示作业的数量.(2 <

HZAU 1205 Sequence Number(双指针)

题目链接:http://acm.hzau.edu.cn/problem.php?id=1205 [题意]给你一串数,要求你找到两个数a[i],a[j],使得a[i]<=a[j]且j>=i且j-i最大. [分析]预处理1~i的最小值,然后从右往左双指针,维护右端点>左端点,如果右端点<1~L的最小值,则移动右端点. #include <cstdio> #include <vector> #include <cstring> #include <

zjut 1179 平均数

平均数  Time Limit:1000MS  Memory Limit:32768K Description: 求若干个整数的平均数. Input: 输入数据含有不多于5组的数据,每组数据由一个整数n(n≤50)打头,表示后面跟着n个整数. Output: 对于每组数据,输出其平均数,精确到小数点后3位,每个平均数应占单独一行. Sample Input: 3 6 5 18 4 1 2 3 4 Sample Output: 9.667 2.500 #include <iostream> us

zjut 1204 01串排序

01串排序  Time Limit:1000MS  Memory Limit:32768K Description: 将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序. Input: 输入数据中含有一些01串,01串的长度不大于256个字符. Output: 重新排列01串的顺序.使得串按基本描述的方式排序. Sample Input: 10011111 00001101 1010101 1 0 1100 Sample Output: 0 1 11

zjut 1208排列对称串

排列对称串  Time Limit:1000MS  Memory Limit:32768K Description: 很多字串,有些是对称的,有些是不对称的,请将那些对称的字串按从小到大的顺序输出.字串先以长度论大小,如果长度相同,再以ASCII码值为大小标准. Input: 输入数据中含有一些字串(1≤串长≤256). Output: 根据每个字串,输出对称的那些串,并且要求按从小到大的顺序输出. Sample Input: 123321 123454321 123 321 sdfsdfd 1