http://ac.jobdu.com/problem.php?pid=1061
题目描述:
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
typedef struct Student {
string name;
int age;
int grade;
}Student;
int main()
{
int n;
Student temp;
while (cin >> n)
{
Student * student = new Student[n];
for (int i = 0; i < n; i++)
cin >> student[i].name >> student[i].age >> student[i].grade;
//冒泡排序,按成绩递增排序
for (int loc = 0; loc < n; loc++)
{
for (int i = n - 1; i > loc; i--)
if (student[i].grade < student[i - 1].grade)
{
temp = student[i];
student[i] = student[i - 1];
student[i - 1] = temp;
}
else if (student[i].grade == student[i - 1].grade)
{
if (student[i - 1].name > student[i].name)
{
temp = student[i];
student[i] = student[i - 1];
student[i - 1] = temp;
}
else if (student[i].name == student[i - 1].name)
{
if (student[i].age < student[i - 1].age)
{
temp = student[i];
student[i] = student[i - 1];
student[i - 1] = temp;
}
}
}
}
for (int i = 0; i < n; i++)
cout << student[i].name << " " << student[i].age << " " << student[i].grade << endl;
}//end of while
return 0;
}
在oj上总是出现超时的错误,但是跟其他ac的代码几乎是一样的,有说printf和scanf会减少运行时间,但是我这样写后出现runtime error的错误。。。。疯了~~~~~