f277 - 嘿嘿想不到吧
題目描述
題目要求讀取 n 個學生的資料(姓名、班級、座號、個介),並按照班級排序,若班級相同則按照座號排序,最後輸出排序後的學員資料,格式為:班級 座號 姓名,以及個介,每位學員資料間隔一行。
解題思路
這題主要考驗排序的概念。首先定義一個結構體 cls 來儲存學生的資料。然後使用 sort 函數,並自定義比較函數 cmp,來實現按照班級和座號排序的功能。比較函數 cmp 的邏輯是,如果兩個學生的班級不同,則按照班級升序排序;如果班級相同,則按照座號升序排序。最後,按照題目要求的格式輸出排序後的學員資料。
複雜度分析
- 時間複雜度: O(n log n)
- 空間複雜度: O(n)
程式碼
#include <iostream>
#include <algorithm>
using namespace std;
struct cls{
string name,its;
int c,num;
};
inline bool cmp(cls x,cls y){
if(x.c>y.c||(x.c==y.c&&x.num>y.num))return 0;
return 1;
}
int n;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
cin >> n;
cls a[n];
for(int i=0;i<n;++i)
cin >> a[i].name >> a[i].c >> a[i].num >> a[i].its;
sort(a,a+n,cmp);
for(int i=0;i<n;++i)
cout << a[i].c << " " << a[i].num << " " << a[i].name << "\n" << a[i].its << "\n";
}