• 杭电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 }
  • 相关阅读:
    8.31前端 jQuery
    8.30前端jQuery和数据结构知识
    8.29 jQuery
    8.28 jQuery
    8.27 jQuery
    8.26 js
    chrome开发工具指南(十二)
    chrome开发工具指南(十一)
    chrome开发工具指南(十)
    chrome开发工具指南(九)
  • 原文地址:https://www.cnblogs.com/wujiyang/p/4793034.html
Copyright © 2020-2023  润新知