蒜头君班上一共有n个同学,每个同学依次编号为
1,2,…n,每个同学有一个分数。现在他请你帮
忙做一份全班同学的成绩排名表。
首先你需要按照分数从高到低将所有同学排序,再
输出成绩单上每个同学的编号。
保证任意两个同学的分数互不相同。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct Student {
int score;
int id;
};
Student stu[105];
bool cmp(Student a, Student b) {
return a.score > b.score;
}
int main() {
int n;
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
scanf_s("%d", &stu[i].score);
stu[i].id = i + 1;
}
sort(stu, stu + n, cmp);
for (int i = 0; i < n; i++) {
if (i == 0)
printf("%d", stu[i].id);
else
printf(" %d", stu[i].id);
}
return 0;
}
结果如下:
输入:
5
97
68
51
85
73
输出:
1 4 5 2 3
小蒜所在的学校一开学就进行了一次摸底考试。摸
底考试考了语文、数学、英语、科学共四门课程。
小蒜的老师汇总成绩后列出了成绩单,其中包括每
个同学的姓名和四科的成绩。现在老师希望表扬一
下每门课程考试得分前四名和总分前四名的同学,
同分数的情况下,名字字典序更小的先表扬。
请你帮助老师写一个程序,快速完成这件事情吧。
输入格式:
第一行为学生人数N(4<= N ≤100)。
之后N行依次为每个学生的姓名和语文、数学、
英语、科学这四门课程的成绩,之间用一个空格隔
开(成绩都大于等于0小于等于100)
输出格式:
输出第一行为语文考试要表扬前四名的同学的姓
名,之间用一个空格隔开。
输出第二行为数学考试要表扬前四名的同学的姓
名,之间用一个空格隔开。
输出第三行为英语考试要表扬前四名的同学的姓
名,之间用一个空格隔开。
输出第四行为科学考试要表扬前四名的同学的姓
名,之间用一个空格隔开。
输出第五行为总分要表扬前四名的同学的姓名,之
间用一个空格隔开。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct Student {
char name[105];
int score[4];
};
Student stu[105];
bool cmp1(Student a, Student b)
{
if (a.score[0] != b.score[0])
{
return a.score[0] > b.score[0];
}
else
{
return strcmp(a.name, b.name) < 0;
}
}
bool cmp2(Student a, Student b)
{
if (a.score[1] != b.score[1])
{
return a.score[1] > b.score[1];
}
else
{
return strcmp(a.name, b.name) < 0;
}
}
bool cmp3(Student a, Student b)
{
if (a.score[2] != b.score[2])
{
return a.score[2] > b.score[2];
}
else
{
return strcmp(a.name, b.name) < 0;
}
}
bool cmp4(Student a, Student b)
{
if (a.score[3] != b.score[3])
{
return a.score[3] > b.score[3];
}
else
{
return strcmp(a.name, b.name) < 0;
}
}
bool cmp5(Student a, Student b)
{
int suma = 0;
int sumb = 0;
for (int i = 0; i < 4; i++)
{
suma += a.score[i];
sumb += b.score[i];
}
if (suma != sumb)
{
return suma>sumb;
}
else
{
return strcmp(a.name, b.name) < 0;
}
}
void print()
{
for (int i = 0; i < 3; i++)
{
printf("%s ", stu[i].name);
}
printf("%s\n", stu[3].name);
}
int main() {
int n;
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
scanf_s("%s", &stu[i].name);
for (int j = 0; j < 4; j++)
{
scanf_s("%d", &stu[i].score[j]);
}
}
sort(stu, stu + n, cmp1);
print();
sort(stu, stu + n, cmp2);
print();
sort(stu, stu + n, cmp3);
print();
sort(stu, stu + n, cmp4);
print();
sort(stu, stu + n, cmp5);
print();
return 0;
}
结果展示:
输入:
5
alice 99 98 97 96
bob 98 97 96 94
coy 94 94 95 96
dan 93 95 96 97
evan 0 94 95 95
输出:
alice bob coy dan
alice bob dan coy
alice bob dan coy
dan alice coy evan
alice bob dan coy