zoukankan      html  css  js  c++  java
  • 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?"
    ":"");
            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?"":"
    ");
      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;
    }



  • 相关阅读:
    操作系统:DOS
    袁氏-人物:袁淑
    移植linux-2.6.32.2到qq2440
    qq2440启动linux后出现错误提示request_module: runaway loop modprobe binfmt-464c
    qq2440启动linux后插入u盘出现usb 1-1: device descriptor read/64, error -110,usb 1-1: device not accepting address 8, error -110
    ubuntu14.04 64bit安装teamviewer
    vi 的使用
    添加了环境变量,然而交叉编译器还是无法运行的解决方案
    linux下route命令使用实战
    ubuntu14.04纯命令行下连接有线网和无线网
  • 原文地址:https://www.cnblogs.com/2014acm/p/3876464.html
Copyright © 2011-2022 走看看