以下是零分代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int n,Total[100000],Chinese[100000],Number[100000];
int main(void){
scanf("%d",&n);
for(int i=2;i<=n+1;i++){
int M,E;
scanf("%d %d %d",&Chinese[i-1],&M,&E);
Total[i-1]=Chinese[i-1]+M+E;
Number[i-1]=i;
}
for(int i=2;i<=n;i++){
for(int j=i;j>=1;j--){
if(Total[j]>Total[j-1]||Total[j]==Total[j-1]&&Chinese[j]>Chinese[j-1]||Total[j]==Total[j-1]&&Chinese[j]==Chinese[j-1]&&Number[j]<Number[j-1]){
swap(Total[j],Total[j-1]);
swap(Chinese[j],Chinese[j-1]);
swap(Number[j],Number[j-1]);
}
else{
break;
}
}
}
for(int i=1;i<=5;i++){
printf("%d %d\n",Number[i],Total[i]);
}
return 0;
}
而改为选择排序之后:(AC代码)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,Total[100000],Chinese[100000],Number[100000];
int main(void){
scanf("%d",&n);
for(int i=2;i<=n+1;i++){
int M,E;
scanf("%d %d %d",&Chinese[i-1],&M,&E);
Total[i-1]=Chinese[i-1]+M+E;
Number[i-1]=i-1;
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(Total[j]>Total[i]||Total[j]==Total[i]&&Chinese[j]>Chinese[i]||Total[j]==Total[i]&&Chinese[j]==Chinese[i]&&Number[j]<Number[i]){
swap(Total[j],Total[i]);
swap(Chinese[j],Chinese[i]);
swap(Number[j],Number[i]);
}
}
}
for(int i=1;i<=5;i++){
printf("%d %d\n",Number[i],Total[i]);
}
return 0;
}
请问是为何?