欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【PAT甲级1505列表排序】结构体排序

【PAT甲级1505列表排序】结构体排序

2025/4/3 14:23:12 来源:https://blog.csdn.net/m0_57050876/article/details/146103461  浏览:    关键词:【PAT甲级1505列表排序】结构体排序

https://www.acwing.com/problem/content/description/1507/
Excel可以根据任何列对记录进行排序。现在,你需要模仿此功能。
输入格式
第一行包含两个整数 N和 C,分别表示记录条数以及用来排序的列的编号。
接下来 N行,每行包含一条学生记录。
记录包括学生 ID,一个唯一的 6 位数字,名称,一个长度不超过 8 的不含空格的字符串,成绩,一个范围在 [0,100] 的整数。

输出格式
输出共 N 行,表示排序后的记录。
如果 C=1,则按照 ID 升序的顺序排序。
如果 C=2,则按照名称以不降序的顺序排序。
如果 C=3,则按照成绩以不降序的顺序排序。
当出现学生名字相同或是成绩相同的情况时,按照 ID 升序的顺序,对他们进行排序。
数据范围
1≤N≤105
输入样例1:
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
输出样例1:
000001 Zoe 60
000007 James 85
000010 Amy 90
输入样例2:
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
输出样例2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
输入样例3:
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
输出样例3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90

#include<bits/stdc++.h> 
using namespace std;struct Row{string a; //a为id int b; //b为成绩 string s; //s为姓名   
}; //【重要】注意cmp1的参数类型是Row,而不是row   
bool cmp1(Row x,Row y){ //也可写const Row &x return x.a<y.a;
} bool cmp2(Row x,Row y){ if(x.s!=y.s) return x.s<y.s;return x.a<y.a;
} bool cmp3(Row x,Row y){if(x.b!=y.b) return x.b<y.b;return x.a<y.a;
}int main() { int n,c;scanf("%d%d",&n,&c); //int输入别忘加& Row row[n];for(int i=0;i<n;i++){ char x[10],y[10];
//		cin>>row[i].a>>row[i].s>>row[i].b; //用cout/cin此会超时 scanf("%s%s%d",x,y,&row[i].b);row[i].a=string(x); //string将字符数组转为字符串 row[i].s=string(y);} if(c==1) sort(row,row+n,cmp1); if(c==2) sort(row,row+n,cmp2); if(c==3) sort(row,row+n,cmp3); for(int i=0;i<n;i++){ 
//		cout<<row[i].a<<" "<<row[i].s<<" "<<row[i].b<<endl; printf("%s %s %d",row[i].a.c_str(),row[i].s.c_str(),row[i].b); printf("\n");}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词