多级排序.解决办法
多级排序....
怎么用C/C++实现一个多级排序???
例如下:
实现一个小学生成绩管理系统,要求把成绩好的同学放到前面的。我们首先是按个人的总成绩进行排名,如果某两个人的总分相同,则按他们的语文成绩进行排名,如果总成绩和语文成绩都相同时,对于这两个人,我们是按照他们的数学成绩进行排名的,他们每个人都有三门课程,语文,数学和英语!
首先输入一行为总共输入学生的数目N,然后在2到N+1行中分别输入学生姓名和对应学生的总分,语文和数学成绩
输出最后排序顺序的名字序列。保证不会存在两个人总成绩和各门的成绩均分别相同的情况。
如:
3
Henry 225 100 98
Marry 210 95 100
Jhon 210 98 85
输出:
Henry
Jhon
Marry
谢谢了!!!
------解决方案--------------------
运行结果:(为啥英语成绩都这么差?哈哈哈)
3
Henry 225 100 98 27
Marry 210 95 100 15
Jhon 210 98 85 27
Henry
Jhon
Marry
怎么用C/C++实现一个多级排序???
例如下:
实现一个小学生成绩管理系统,要求把成绩好的同学放到前面的。我们首先是按个人的总成绩进行排名,如果某两个人的总分相同,则按他们的语文成绩进行排名,如果总成绩和语文成绩都相同时,对于这两个人,我们是按照他们的数学成绩进行排名的,他们每个人都有三门课程,语文,数学和英语!
首先输入一行为总共输入学生的数目N,然后在2到N+1行中分别输入学生姓名和对应学生的总分,语文和数学成绩
输出最后排序顺序的名字序列。保证不会存在两个人总成绩和各门的成绩均分别相同的情况。
如:
3
Henry 225 100 98
Marry 210 95 100
Jhon 210 98 85
输出:
Henry
Jhon
Marry
谢谢了!!!
------解决方案--------------------
运行结果:(为啥英语成绩都这么差?哈哈哈)
3
Henry 225 100 98 27
Marry 210 95 100 15
Jhon 210 98 85 27
Henry
Jhon
Marry
- C/C++ code
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main(){ int N=0; cin>>N; char (*namemarks)[128]= new char[N][128]; char name[32]; int mark, mark1, mark2, mark3; for(int i=0;i<N;i++){ cin>> name >> mark >> mark1 >> mark2 >> mark3; sprintf(namemarks[i],"%3d %3d %3d %3d %s", mark, mark1,mark2,mark3, name); } // selectsort: int j,max; char temp[128]; for(i=0;i <N-1;++i){ max=i; for(j=i+1;j<N;++j) if( strcmp(namemarks[max], namemarks[j]) < 0) max=j; if(max!=i){ strcpy(temp, namemarks[i]); strcpy(namemarks[i], namemarks[max]); strcpy(namemarks[max], temp); } } // print the result: cout<< endl; for(i=0;i<N;i++) cout<< namemarks[i]+16 <<endl; // from 16th, it's name return 0; }