成績排序

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32M,其他語言64M 熱度指數:107624

本題知識點: 排序

 算法知識視頻講解

校招時部分企業筆試將禁止編程題跳出頁面,爲提前適應,練習時請使用在線自測,而非本地IDE。

題目描述

查找和排序

題目:輸入任意(用戶,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績
都按先錄入排列在前的規則處理。

示例:
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.用結構體數組存儲輸入的數據,結構體包含一個int(存放成績)和一個char數組(存放用戶,成績)

2.分理處成績。由於姓名和成績之間用空格分開,可以用空格作爲成績的開始標記

3.用stable_sort()爲結構體進行穩定排序

#include<iostream>
#include<algorithm>
#define maxn 100
using namespace std;
typedef struct mark{
    char a[maxn];
    int  grade;
};
int cmpasc(const mark &a,const mark &b)
{
    return a.grade>b.grade;
}
int cmpdsc(const mark &a,const mark &b)
{
    return a.grade<b.grade;
}
int main()
{
    int n,t;
    while(cin>>n)
    {
        cin>>t;
        getchar();
        mark m[n],mid;
        for(int i=0;i<n;i++)
                cin>>m[i].a>>m[i].grade;        
        if(!t)
             {
                 stable_sort(m,m+n,cmpasc);
            }         
            else
            {
                stable_sort(m,m+n,cmpdsc);            
            } 
        for(int i=0;i<n;i++) 
            cout<<m[i].a<<' '<<m[i].grade<<endl;    
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章