问题
算法思想
使用冒泡排序
- 输入n代表参加评选的学生人数 ;依次输入n名同学的语文、数学、英语成绩;计算n名同学的总分,学号
- if j的总分小于j+1的总分||j的总分等于j+1的总分并且j的语文小于j+1的语文||j的总分等于j+1的总分并且j的语文等于j+1的语文并且j的学号小于j+1的学号,交换j与j+1的语文、数学、英语、总分和学号;
- 分别输出n名同学的学号、总分。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[300],b[300],c[300],total[300],id[300];//语文、数学、英语、总分、学号
for(int i=0;i<n;i++){
cin>>a[i]>>b[i]>>c[i];
total[i]=a[i]+b[i]+c[i];
id[i]=i+1;
}
for(int i=0;i<n;i++){//n趟
for(int j=0;j<n;j++){//一趟冒泡排序
if((total[j]<total[j+1])||(total[j]==total[j+1]&&a[j]<a[j+1])||(total[j]==total[j+1]&&a[j]<a[j+1]&&id[j]<id[j+1])){
swap(a[j],a[j+1]);
swap(b[j],b[j+1]);
swap(c[j],c[j+1]);
swap(total[j],total[j+1]);
swap(id[j],id[j+1]);
}
}
}
for(int i=0;i<5;i++){
cout<<id[i]<<" "<<total[i]<<endl;
}
return 0;
}
收获
冒泡排序要用双层for循环