zoukankan      html  css  js  c++  java
  • KY2成绩排序

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
    本题知识点: 排序

    题目描述

    查找和排序

    题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
    都按先录入排列在前的规则处理。

    示例:
    jack      70
    peter     96
    Tom       70
    smith     67

    从高到低  成绩
    peter     96
    jack      70
    Tom       70
    smith     67

    从低到高

    smith     67

    jack      70
    Tom      70
    peter     96

    输入描述:

    输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。

    输出描述:

    按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开。

    示例1
    输入

    3

    0

    fang 90
    yang 50
    ning 70

    输出

    fang 90

    ning 70

    yang 50


     1 #include<stdio.h>
     2 #include<string.h>
     3 typedef struct Student
     4 {
     5     char name[15];
     6     int score;
     7 }Student;
     8 
     9 int main()
    10 {
    11     int number;
    12     int way;
    13     int flag=0;
    14     Student student[1000];
    15     
    16     while(scanf("%d%d",&number,&way)!=EOF)
    17     {
    18         for(int i=0;i<number;i++)
    19         {
    20             scanf("%s%d",student[i].name,&student[i].score);
    21         }
    22         if(way!=0)
    23         {
    24             int i,j;
    25             Student temp;
    26             for(i=0;i<number;i++)
    27             {
    28                 flag=0;
    29                 for(j=0;j<number-i-1;j++)
    30                 {
    31                     if(student[j].score>student[j+1].score)
    32                     {
    33                         temp=student[j];
    34                         student[j]=student[j+1];
    35                         student[j+1]= temp;
    36                         flag=1;
    37                     }
    38                 }
    39                 if(flag==0)break;
    40             }
    41         }
    42         else
    43         {
    44             int i,j;
    45             Student temp;
    46             for(i=0;i<number;i++)
    47             {
    48                 flag=0;
    49                 for(j=0;j<number-i-1;j++)
    50                 {
    51                     if(student[j].score<student[j+1].score)
    52                     {
    53                         temp=student[j];
    54                         student[j]=student[j+1];
    55                         student[j+1]= temp;
    56                         flag=1;
    57                     }
    58                 }
    59                 if(flag==0)break;
    60             }
    61         }
    62         for(int i=0;i<number;i++)
    63         {
    64             printf("%s %d
    ",student[i].name,student[i].score);
    65         }
    66     }
    67     return 0;
    68 }

    个人错误:

    1. 不知道要循环输入而不是一次输入;
    2. 记混了冒泡与选择排序;
    3. 不知道选择排序不稳定;
    4. 冒泡排序要判断是否进行交换以减少时间复杂度;
    5. 忘记了结构体变量赋值和交换数据;
    6. 结构体数组要大一些,50不够;
    7. scanf返回值是输入的个数;

    scanf 函数是有返回值的,它的返回值可以分成三种情况
      1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);
          如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量);
          如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。
      2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。
      3) EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

    运行结果 运行时间 占用内存 使用语言
    答案正确 4ms 384KB C++
    用例输入
    3
    0
    moolgouua 43
    aebjag 87
    b 67
    28
    1
    qhsq 15
    ozslg 79
    ncttmtsphb 71
    a 39
    eeiuyzsj 34
    nmlrokx 21
    pjizylo 90
    ec 45
    f 12
    sh 31
    fm 25
    ptprphubqk 29
    wxdiwv 0
    uhlcpjtxad 60
    w 20
    zwktbpun 70
    efzfkf 69
    v 31
    rsnrgtl 73
    lhdo 76
    wt 56
    mcdwd 14
    ydrnoyd 37
    gmlfds 76
    zx 1
    dqx 98
    gz 90
    kvbzrwrrjj 13
    预期输出
    aebjag 87
    b 67
    moolgouua 43
    wxdiwv 0
    zx 1
    f 12
    kvbzrwrrjj 13
    mcdwd 14
    qhsq 15
    w 20
    nmlrokx 21
    fm 25
    ptprphubqk 29
    sh 31
    v 31
    eeiuyzsj 34
    ydrnoyd 37
    a 39
    ec 45
    wt 56
    uhlcpjtxad 60
    efzfkf 69
    zwktbpun 70
    ncttmtsphb 71
    rsnrgtl 73
    lhdo 76
    gmlfds 76
    ozslg 79
    pjizylo 90
    gz 90
    dqx 98



  • 相关阅读:
    循环队列和链队列的实现
    【lightoj-1026】Critical Links(桥)
    顺序栈和链栈的实现
    【51nod-1605】棋盘问题
    【51nod-1596】搬货物
    【海明码】(容易看懂)
    【lightoj-1094】树的直径(DFS)
    【lightoj-1046】Rider(BFS)
    【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-F】等式(因子个数)
    浅谈Vue个性化dashBoard 布局
  • 原文地址:https://www.cnblogs.com/IceHowe/p/14366005.html
Copyright © 2011-2022 走看看