zoukankan      html  css  js  c++  java
  • 杭电oj1236 排名

    Tips:此题比较简单,最好将每一个学生的信息构建一个结构体,另外需要注意的是,若分数相同,排序按姓名排序,我看网上很多都是使用<algorithm>中的sort算法,只需重写cmp函数即可。

    该方法如下所示:

    1 #include<aigorithm>
    2 bool cmp(const node &a,const node &b)  
    3 {  
    4     if(a.sum == b.sum)  
    5         return strcmp(a.name,b.name) < 0 ? 1 : 0;  
    6     else  
    7         return a.sum > b.sum;  
    8 }  

    但由于我自己是采用纯C语言代码提交的,所以排序时时是自己写的sort函数,采用冒泡排序,虽然较慢,不过也可以AC

     1 void sort(struct node stu[],int n)
     2 {
     3     int i = 0;
     4     int j = 0;
     5     for(i = 0 ;i < n;i++)
     6     {
     7         for(j = i ; j < n ; j++)
     8         {
     9             if(stu[i].sum<stu[j].sum) //按分值由大到小排序
    10             {
    11                 struct node temp = stu[i];
    12                 stu[i] = stu[j];
    13                 stu[j] = temp;
    14             }else if(stu[i].sum == stu[j].sum)
    15             {
    16                 if(strcmp(stu[i].name,stu[j].name) > 0)
    17                 {
    18                     struct node temp = stu[i];
    19                     stu[i] = stu[j];
    20                     stu[j] = temp;
    21                 }
    22             }
    23         }
    24     }
    25 }

    最后附上完整源程序:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define MAXSTU 1005
     4 struct node
     5 {
     6     char name[25]; //姓名
     7     int num; //完成题目数量
     8     int sum; //得分
     9 }stu[MAXSTU];
    10 
    11 void sort(struct node stu[],int n)
    12 {
    13     int i = 0;
    14     int j = 0;
    15     for(i = 0 ;i < n;i++)
    16     {
    17         for(j = i ; j < n ; j++)
    18         {
    19             if(stu[i].sum<stu[j].sum) //按分值由大到小排序
    20             {
    21                 struct node temp = stu[i];
    22                 stu[i] = stu[j];
    23                 stu[j] = temp;
    24             }else if(stu[i].sum == stu[j].sum)
    25             {
    26                 if(strcmp(stu[i].name,stu[j].name) > 0)
    27                 {
    28                     struct node temp = stu[i];
    29                     stu[i] = stu[j];
    30                     stu[j] = temp;
    31                 }
    32             }
    33         }
    34     }
    35 }
    36 
    37 int main()
    38 {
    39     int N = 0; //考生人数
    40     int M = 0; //考题数量
    41     int G = 0; //分数线
    42     int score[10] = {0};//每道题的分值
    43     int i=0,j=0;
    44     int cnt = 0;
    45     while(scanf("%d",&N) && N != 0)
    46     {
    47         scanf("%d %d",&M,&G);
    48         for(i=0;i<M;i++)//读入第二行分值数据
    49         {
    50             scanf("%d",&score[i]);
    51         }
    52         cnt = 0;
    53         for(i=0;i<N;i++)//循环读入每隔学生的信息数据
    54         {
    55             scanf("%s%d",stu[i].name,&stu[i].num);
    56             stu[i].sum = 0;
    57             while(stu[i].num--)
    58             {
    59                 scanf("%d",&j);
    60                 stu[i].sum += score[j-1];
    61             }
    62             if(stu[i].sum >= G)
    63                 cnt++;
    64         }
    65 
    66         sort(stu,N);
    67         printf("%d
    ",cnt);
    68         for(i=0;i<N;i++)
    69         {
    70             if(stu[i].sum >= G)
    71             {
    72                 printf("%s %d
    ",stu[i].name,stu[i].sum);
    73             }
    74         }
    75 
    76     }
    77     return 0;
    78 }
  • 相关阅读:
    使用FolderBrowserDialog组件选择文件夹
    使用OpenFileDialog组件打开多个文
    使用OpenFileDialog组件打开对话框
    获取弹出对话框的相关返回值
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1137 Final Grading (25 分)
    PAT 甲级 1137 Final Grading (25 分)
  • 原文地址:https://www.cnblogs.com/wujiyang/p/4793034.html
Copyright © 2011-2022 走看看