1028. List Sorting (25)
2016-07-07 10:30
288 查看
Excel can sort records according to any column. Now you are supposed to imitate this function.
Input
Each input file contains one test case. For each case, the first line contains two integers N (<=100000) and C, where N is the number of records and C is the column that you are supposed to sort the records with. Then N lines follow, each contains a record
of a student. A student's record consists of his or her distinct ID (a 6-digit number), name (a string with no more than 8 characters without space), and grade (an integer between 0 and 100, inclusive).
Output
For each test case, output the sorting result in N lines. That is, if C = 1 then the records must be sorted in increasing order according to ID's; if C = 2 then the records must be sorted in non-decreasing order according to names; and if C = 3 then the
records must be sorted in non-decreasing order according to grades. If there are several students who have the same name or grade, they must be sorted according to their ID's in increasing order.
Sample Input 1
Sample Output 1
Sample Input 2
Sample Output 2
Sample Input 3
Sample Output 3
按照学号,名字或分数给学生排序。用结构体的排序可以实现,编写三种比较函数,用sort来完成排序。要注意的是直接用cin,cout最后一个case会超时,要用scanf和printf来输入输出。
代码:
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
struct student
{
int id;
string name;
int grade;
};
bool cmp1(const student &s1,const student &s2)
{
return s1.id<s2.id;
}
bool cmp2(const student &s1,const student &s2)
{
if(s1.name!=s2.name) return s1.name<s2.name;
else return s1.id<s2.id;
}
bool cmp3(const student &s1,const student &s2)
{
if(s1.grade!=s2.grade) return s1.grade<s2.grade;
else return s1.id<s2.id;
}
int main()
{
int n,c;
scanf("%d %d",&n,&c);
vector<student>students(n);
for(int i=0;i<n;i++)
{
char name[9];
scanf("%d %s %d",&students[i].id,name,&students[i].grade);
students[i].name=name;
}
if(c==1) sort(students.begin(),students.end(),cmp1);
else if(c==2) sort(students.begin(),students.end(),cmp2);
else sort(students.begin(),students.end(),cmp3);
for(int i=0;i<n;i++)
{
printf("%06d %s %d\n",students[i].id,students[i].name.c_str(),students[i].grade);
}
}
Input
Each input file contains one test case. For each case, the first line contains two integers N (<=100000) and C, where N is the number of records and C is the column that you are supposed to sort the records with. Then N lines follow, each contains a record
of a student. A student's record consists of his or her distinct ID (a 6-digit number), name (a string with no more than 8 characters without space), and grade (an integer between 0 and 100, inclusive).
Output
For each test case, output the sorting result in N lines. That is, if C = 1 then the records must be sorted in increasing order according to ID's; if C = 2 then the records must be sorted in non-decreasing order according to names; and if C = 3 then the
records must be sorted in non-decreasing order according to grades. If there are several students who have the same name or grade, they must be sorted according to their ID's in increasing order.
Sample Input 1
3 1 000007 James 85 000010 Amy 90 000001 Zoe 60
Sample Output 1
000001 Zoe 60 000007 James 85 000010 Amy 90
Sample Input 2
4 2 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 98
Sample Output 2
000010 Amy 90 000002 James 98 000007 James 85 000001 Zoe 60
Sample Input 3
4 3 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 90
Sample Output 3
000001 Zoe 60 000007 James 85 000002 James 90 000010 Amy 90
按照学号,名字或分数给学生排序。用结构体的排序可以实现,编写三种比较函数,用sort来完成排序。要注意的是直接用cin,cout最后一个case会超时,要用scanf和printf来输入输出。
代码:
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
struct student
{
int id;
string name;
int grade;
};
bool cmp1(const student &s1,const student &s2)
{
return s1.id<s2.id;
}
bool cmp2(const student &s1,const student &s2)
{
if(s1.name!=s2.name) return s1.name<s2.name;
else return s1.id<s2.id;
}
bool cmp3(const student &s1,const student &s2)
{
if(s1.grade!=s2.grade) return s1.grade<s2.grade;
else return s1.id<s2.id;
}
int main()
{
int n,c;
scanf("%d %d",&n,&c);
vector<student>students(n);
for(int i=0;i<n;i++)
{
char name[9];
scanf("%d %s %d",&students[i].id,name,&students[i].grade);
students[i].name=name;
}
if(c==1) sort(students.begin(),students.end(),cmp1);
else if(c==2) sort(students.begin(),students.end(),cmp2);
else sort(students.begin(),students.end(),cmp3);
for(int i=0;i<n;i++)
{
printf("%06d %s %d\n",students[i].id,students[i].name.c_str(),students[i].grade);
}
}
相关文章推荐
- 在命令行用 sort 进行排序
- Linux Shell - 如何使用sort与uniq命令删除重复的文本行
- Redis sort 排序命令详解
- 批处理命令教学之字符串排序(sort)
- mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解决方法
- C++ 关于STL中sort()对struct排序的方法
- C#中Arraylist的sort函数用法实例分析
- Js中sort()方法的用法
- js采用concat和sort将N个数组拼接起来的方法
- 如何写JS数组sort的比较函数
- javascript中sort()的用法实例分析
- 详解Matlab中 sort 函数用法
- js模拟实现Array的sort方法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- js表数据排序 sort table data
- javascript 数组排序函数sort和reverse使用介绍
- JavaScript Table排序 2.0 (更新)
- js中数组(Array)的排序(sort)注意事项说明
- Javascript数组的排序 sort()方法和reverse()方法
- Java数据结构及算法实例:插入排序 Insertion Sort