题目描述
PAT甲级 1028 List Sorting (25 分)
第一行输入n
和c
。之后输入n
行,每行包括id、name、grade
。
当c==1
时,按id递增排序
当c==2
时,按name非递减排序
当c==3
时,按grade非递减排序
当grade或name
时,按id递增排序
思路
使用结构体来存储数据,之后根据c
的值定义不同cmp函数即可
#include <bits/stdc++.h>
using namespace std;
struct node
{
string id,name;
int grade;
}a[100005];
bool cmp1(const node a,const node b)
{
return a.id<b.id;
}
bool cmp2(const node a,const node b)
{
if(a.name!=b.name)return a.name<b.name;
else return a.id<b.id;
}
bool cmp3(const node a,const node b)
{
if(a.grade!=b.grade)return a.grade<b.grade;
else return a.id<b.id;
}
int main()
{
int n,c;
scanf("%d %d",&n,&c);
for(int i=0;i<n;i++)
{
a[i].id.resize(10);//需要预先分配空间
a[i].name.resize(10);
scanf("%s %s %d",&a[i].id[0],&a[i].name[0],&a[i].grade);
}
if(c==1) sort(a,a+n,cmp1);
if(c==2) sort(a,a+n,cmp2);
if(c==3) sort(a,a+n,cmp3);
for(int i=0;i<n;i++)
{
printf("%s %s %d\n",a[i].id.c_str(),a[i].name.c_str(),a[i].grade);//成员函数c_str()
}
return 0;
}