PAT1028
Posted chuan-chuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT1028相关的知识,希望对你有一定的参考价值。
“你是我做过最简单的25分题”
——谨以此开头献给 PAT1028
解题思路
这就是是一道字符串操作+排序的题目,相信每一位做多了PAT的盆友都不会对此陌生了,一顿sort,cmp操作就完结了,最多就是注意一些细节的东西,算法方面没有什么可说的。
直接贴代码好吧(逃
/* id是不会相同的,但是名字和成绩是可能会相同的,所以c==2、3的时候的cmp函数会复杂一点 sort结果为真,放到前面 cmp函数要使用严格的大于小于判定,不能含有相等 */ #include<stdio.h> #include<iostream> #include<algorithm> #include<cstring> using namespace std; struct student{ char id[7]; char name[9]; int grade; }Student[100001]; bool cmp1(student a,student b){ return strcmp(a.id,b.id) < 0; //不能不写<0 ,id小的放到前面 } bool cmp2(student a,student b){ return strcmp(a.name,b.name)==0 ? strcmp(a.id,b.id)<0 : strcmp(a.name,b.name)<0; //名字相同情况下,id小的放到前面,名字不同则名字串小的放到前面 } bool cmp3(student a,student b){ return a.grade==b.grade ? strcmp(a.id,b.id)<0 : a.grade<b.grade; } int main(){ freopen("in.txt","r",stdin); int n,c; scanf("%d %d",&n,&c); for(int i=0;i<n;++i){ scanf("%s %s %d",&Student[i].id,&Student[i].name,&Student[i].grade); } if(c==1){ sort(Student,Student+n,cmp1); } else if(c==2){ sort(Student,Student+n,cmp2); } else if(c==3){ sort(Student,Student+n,cmp3); } for(int i=0;i<n;++i){ printf("%s %s %d ",Student[i].id,Student[i].name,Student[i].grade); } return 0; }
以上是关于PAT1028的主要内容,如果未能解决你的问题,请参考以下文章
PAT甲级 1028 List Sorting (25分)(cin cout 超时问题)