多级排序....

zhangjian110518 2008-02-28 09:13:31
怎么用C/C++实现一个多级排序???
例如下:
实现一个小学生成绩管理系统,要求把成绩好的同学放到前面的。我们首先是按个人的总成绩进行排名,如果某两个人的总分相同,则按他们的语文成绩进行排名,如果总成绩和语文成绩都相同时,对于这两个人,我们是按照他们的数学成绩进行排名的,他们每个人都有三门课程,语文,数学和英语!
首先输入一行为总共输入学生的数目N,然后在2到N+1行中分别输入学生姓名和对应学生的总分,语文和数学成绩
输出最后排序顺序的名字序列。保证不会存在两个人总成绩和各门的成绩均分别相同的情况。
如:
3
Henry 225 100 98
Marry 210 95 100
Jhon 210 98 85


输出:

Henry
Jhon
Marry

谢谢了!!!

...全文
178 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dubiousway 2008-02-29
  • 打赏
  • 举报
回复
运行结果:(为啥英语成绩都这么差?哈哈哈)
3
Henry 225 100 98 27
Marry 210 95 100 15
Jhon 210 98 85 27

Henry
Jhon
Marry


#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;
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧