zoukankan      html  css  js  c++  java
  • 排名-含结构排名

    题目描述

        今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。

    输入

        测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号(题目号由1到M)。 
        当读入的考生人数为0时,输入结束,该场考试不予处理。

    输出

        对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出

    样例输入

    4 5 25
    10 10 12 13 15
    CS004 3 5 1 3
    CS003 5 2 4 1 3 5
    CS002 2 1 2
    CS001 3 2 3 5
    1 2 40
    10 30
    CS001 1 2
    2 3 20
    10 10 10
    CS000000000000000001 0
    CS000000000000000002 2 1 2
    0

    样例输出

    3
    CS003 60
    CS001 37
    CS004 37
    0
    1
    CS000000000000000002 20

     1 #include<stdio.h>
     2 #include<malloc.h>
     3 #include<algorithm>
     4 #include<string.h>
     5 using namespace std;
     6 
     7 typedef struct stu{
     8     char num_P[21];
     9     int tol_slv;
    10     int flag_slv[12];
    11     int getscore;
    12 }stu;
    13 bool cmp(stu s1,stu s2){
    14     int t=strcmp(s1.num_P,s2.num_P);
    15     if(s1.getscore==s2.getscore) return t<0;//return t<0就表示了方晖字符串比较的升序
    16     else return s1.getscore>s2.getscore;
    17 }
    18 int main(){
    19     int num_P;
    20     while(scanf("%d",&num_P)&&num_P>0&&num_P<1000){
    21         int num_Q,num_G;
    22         int pass=0;//记录过线人数
    23         scanf("%d %d",&num_Q,&num_G);
    24         int *Q_ary=(int *)malloc(num_Q*sizeof(int));
    25         for(int i=0;i<num_Q;i++){//读每道题分值
    26             scanf("%d",&Q_ary[i+1]);//跟flag_slv[]对齐
    27         }
    28         stu *student=(stu *)malloc(sizeof(stu)*num_P);
    29         for(int i=0;i<num_P;i++){//每个学生数据初始化
    30             scanf("%s %d",student[i].num_P,&student[i].tol_slv);//学号和总的做出题数
    31             for(int j=0;j<student[i].tol_slv;j++){
    32                 int pos;
    33                 scanf("%d",&pos);
    34                 student[i].flag_slv[pos]=1;//编辑做出题的位置
    35             }
    36         }
    37         for(int i=0;i<num_P;i++){//每个人遍历
    38                student[i].getscore=0;//初始化
    39             for(int j=0;j<num_Q;j++){ //每道题检查做出来没,分数累加
    40                 if(student[i].flag_slv[j+1]){
    41                     student[i].getscore+=Q_ary[j+1];
    42                 }
    43 
    44             }
    45             if(student[i].getscore>=num_G) pass++;
    46 
    47         }
    48         if(pass==0) printf("0
    ");
    49         else {
    50             printf("%d
    ",pass);
    51             sort(student,student+num_P,cmp);
    52             for(int i=0;i<num_P;i++){
    53                 if(student[i].getscore>=num_G){
    54                     printf("%s %d
    ",student[i].num_P,student[i].getscore);
    55                 }
    56             }
    57 
    58         }
    59 
    60 
    61     }
    62 return 0;
    63 }
  • 相关阅读:
    快速分栏
    伪元素:before和:after的简单应用——清除浮动
    C# 调用事件
    C# 创建文件夹
    (C#-VisionPro)用代码方式新建VisionPro视觉文件(.vpp)
    C# 选择下拉框文件时触发
    C# 将指定目录下的文件夹名称加载到下拉框中
    (C#-VisionPro)用C#加载、保存ViaionPro的'.vpp'文件
    C# 关闭程序时保存程序数据
    (C#-VisionPro)用C#调用VisionPro保存的.vpp文件
  • 原文地址:https://www.cnblogs.com/debug-the-heart/p/12486957.html
Copyright © 2011-2022 走看看