4-题目1023:EXCEL排序

http://ac.jobdu.com/problem.php?pid=1023

题目描述:
    Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
    对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

这道题我看到的第一反应是应该全部输入后再一起输出Case,所以写了个二维结构体数组。。。。。然后看别人的代码居然是一个一个输出的。。。。。
用sort和compare好方便啊,以后不用自己写排序了好开心!~~~~~(当然算法还是要掌握的)

但是这题我一直runtime error.......我不知道为什么。。。。我觉得和别人的ac代码差不多啊
100000太大了,在VS2013上总是栈溢出,我只能在本地运行时弄小一点的MAX,然后提交时写成100000,但还是RE
已解决:是oj的提示错了,我写了system("pause"),居然提示RE,难道不是提示TLE吗?去掉那一句就AC了

#include  
#include  
#include
#include  
using namespace std;
#define MAX 100000
typedef struct Student {
    string ID;
	string name;
	int grade;
}Student;

bool com1(Student a, Student b)    //根据ID排序
{
	return a.ID < b.ID;
}
bool com2(Student a, Student b)    //根据name排序
{
	return a.name != b.name ? a.name < b.name : a.ID < b.ID;
}
bool com3(Student a, Student b)    //根据grade排序
{
	return a.grade != b.grade ? a.grade < b.grade : a.ID < b.ID;
}
int main()
{
	int i = 0 ,k,N,C;
	Student student[MAX];

	while (cin >> N >> C && N != 0)
	{
		i++;   //测试用例的组数,从1开始
		for (k = 0; k < N; k++)
			cin >> student[k].ID >> student[k].name >> student[k].grade;

		switch (C)
		{
			case 1:sort(student, student + N, com1); break;
			case 2:sort(student, student + N, com2); break;
			case 3:sort(student, student + N, com3); break;
		}

		cout << "Case " << i << ":" << endl;
		for (k = 0; k < N; k++)
			cout << student[k].ID << " " << student[k].name << " " << student[k].grade << endl;
	}//end of while

	system("pause");
	return 0;
}



你可能感兴趣的:(九度oj,代码,AC)