我思考了很久也没有想出好答案,您们能想出来吗,十分感谢!
题目
某班级进行了一次考试,本次考试考了语文,数学两科成绩,班主任想让小明根据本次班级考试的学生的分数情况,进行一个排名,先按照总分进行排名,总分高的排名在最前面,总分一样时,按照语文成绩从高到低进行排名,如果语文成绩一样,则按照学号小的排到前面。班主任想要获得班级里前五名的情况,请你用c++语言回答。(说明:编号以输入时的次序作为该学生的编号)
输入描述
总共n+1行
第一行一个整数n,表示班级总人数n
接下来有n行,每行有4个数据,第一个数据表示姓名,第二个数据表示语文成绩,第三个表示数学成绩
输出描述
总共输出5行,为前5名学生的情况
每行有3个数据,该学生的编号,姓名,总分,每个数据之间使用一个空格
样例
输入
6
xiaomin 80 96
aji 98 63
wangmin 55 90
duoduo 99 89
zhang 100 100
min 98 63
输出
5 zhang 200
4 duoduo 188
1 xiaomin 176
2 aji 161
6 min 161
我写的是
#include
using namespace std;
int main() {
int a;
cin >> a;
for (a;a<100;a++)
{
}
return 0;
}
然后就不会了,您们能帮我写一下吗,谢谢!
供参考:
#include<iostream>
using namespace std;
struct student{
int id;
char name[16];
int language,math;
int sum;
}stu[50];
void swap(struct student *a, struct student *b)
{
struct student t;
t = *a; *a = *b; *b = t;
}
int main() {
int n, i, j;
cin >> n;
for (i = 0;i < n; i++)
{
stu[i].id = i+1;
cin >> stu[i].name >> stu[i].language >> stu[i].math;
stu[i].sum = stu[i].language + stu[i].math;
}
for (i = n - 1; i > 0; i--)
{
for (j = 0; j < i; j++)
{
if (stu[j].sum < stu[j+1].sum ||
stu[j].sum == stu[j+1].sum && stu[j].language < stu[j+1].language ||
stu[j].language == stu[j+1].language && stu[i].id > stu[j+1].id)
swap(&stu[j], &stu[j+1]);
}
}
for (i = 0; i < 5; i++)
cout << stu[i].id << " " << stu[i].name << " " << stu[i].sum << endl;
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: