上完编程课,老师布置了一道结构体的作业,题目是这样的:
小明(没错就是他)所在的学校一开学就进行了一次摸底考试。摸底考试考了语文、数学、英语、科学共四门课程。
小明的老师汇总成绩后列出了成绩单,其中包括每个同学的姓名和四科的成绩。现在老师希望表扬一下每门课程考试得分前四名和总分前四名的同学,同分数的情况下,名字字典序更小的先表扬。
请你帮助老师写一个程序,快速完成这件事情吧。(我的内心os:关我什么事???)
输入格式
第一行为学生人数 n(4≤n≤100)n(4≤n≤100)。
之后 n 行依次为每个学生的姓名和语文、数学、英语、科学这四门课程的成绩,之间用一个空格隔开(成绩都大于等于 0 小于等于 100)。
输出格式
输出第一行为语文考试要表扬前四名的同学的姓名,之间用一个空格隔开。
输出第二行为数学考试要表扬前四名的同学的姓名,之间用一个空格隔开。
输出第三行为英语考试要表扬前四名的同学的姓名,之间用一个空格隔开。
输出第四行为科学考试要表扬前四名的同学的姓名,之间用一个空格隔开。
输出第五行为总分要表扬前四名的同学的姓名,之间用一个空格隔开。
这道题原本可以用结构体在0.114514(bushi)秒做出来,但是聪(叛)明(逆)的我,却用了数组(明明就是没听课),然后写出了下面的(屎山)代码:
using namespace std;
#include<iostream>
#include<cstring>
int a[114]={0},a1[114];
int b[114]={0},b1[114];
int c[114]={0},c1[114];
int d[114]={0},d1[114];
int sum[114]={0};
string name[114],y[114];
void huanyuan(int s){
for(int i=0;i<s;i++){
name[i] = y[i];
a[i] = a1[i];
b[i] = b1[i];
c[i] = c1[i];
d[i] = d1[i];
}
}
int mp(int s,int l[]) {
for(int i=0; i<s; i++) {
for(int j=i+1; j<s; j++) {
if(l[i]<l[j]) {
int t=l[i];
l[i] = l[j];
l[j] = t;
string t1=name[i];
name[i] = name[j];
name[j] = t1;
}
else if(name[i]>name[j] && l[i]==l[j]){
int t=l[i];
l[i] = l[j];
l[j] = t;
string t1=name[i];
name[i] = name[j];
name[j] = t1;
}
}
}
for(int i=0; i<4; i++) cout<<name[i]<<" ";
huanyuan(s);
cout<<endl;
}
int main() {
int s;
cin>>s;
for(int i=0; i<s; i++) {
cin>>name[i]>>a[i]>>b[i]>>c[i]>>d[i];
y[i] = name[i];
a1[i] = a[i];
b1[i] = b[i];
c1[i] = c[i];
d1[i] = d[i];
}
mp(s,a);
mp(s,b);
mp(s,c);
mp(s,d);
for(int i=0; i<s; i++) a[i] = a[i] + b[i] + c[i] + d[i];
mp(s,a);
return 0;
}
一共用了11个数组。。。(累成🐕了)