原题传送门
思路:先定义学号语文数学英语总分五个数组,再对数组进行赋值,然后用冒泡排序和if条件分三种情况进行swap,最后打印出前五名的学号和总分即可。注意点:学号从1开始不是0!
代码参考
#include<iostream>
using namespace std;
int main(){
int n,id[300],chinese[300],math[300],english[300],total[300];
cin>>n;
for(int i = 1;i <= n;i++){
cin>>chinese[i]>>math[i]>>english[i];
total[i] = chinese[i]+math[i]+english[i];
id[i] = i;
}
for(int i = 0;i < n-1;i++){
for(int j = 1;j <= n-i;j++){
if(total[j] < total[j+1]){
swap(total[j],total[j+1]);
swap(chinese[j],chinese[j+1]);
swap(id[j],id[j+1]);
}
if(total[j] == total[j+1])
if(chinese[j] < chinese[j+1]){
swap(id[j],id[j+1]);
swap(chinese[j],chinese[j+1]);
swap(total[j],total[j+1]);
}
if((total[j] == total[j+1]) && (chinese[j] == chinese[j+1]))
if(id[j] > id[j+1]){
swap(id[j],id[j+1]);
swap(chinese[j],chinese[j+1]);
swap(total[j],total[j+1]);
}
}
}
//打印出前五名的学号和总分
for(int k = 1;k <= 5;k++)
cout<<id[k]<<" "<<total[k]<<endl;
return 0;
}