#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
int main(void){
int n,a,g,g1,i=0,z,x,c,te;
float num,avg;
multiset<float> st;
cin>> n;
vector<int> v1,v2,v3,v4;
pair<int,float> pp[n+1],qq[n];
float A[n][3];
for(int i=0;i<n;i++){
cin >> a;
for(int j=0;j<3;j++){
cin>> num;
A[i][j]=num;
}
}
for(int i=0;i<n;i++){
avg=(A[i][0]*5+A[i][1]*3+A[i][2]*2)/10;
pp[i].first=i+1;
pp[i].second=avg;
st.insert(avg);
}
for(set<float>::iterator it=st.begin();it!=st.end();it++){
g=0;
z=101;
x=101;
c=101;
v1.clear();
v2.clear();
v3.clear();
v4.clear();
for(int j=0;j<n;j++){
if(*it==pp[j].second){
v1.push_back(j); //存入*it==pp[j].second
}
}
if(v1.size()>1){
for(int j=0;j<v1.size();j++){
if(A[v1[j] ][0]<=z){ //
z=A[v1[j] ][0];
}
}for(int j=0;j<v1.size();j++){
if(A[v1[j] ][0]==z){
v2.push_back(v1[j] );
}
}
if(v2.size()>1){
for(int j=0;j<v2.size();j++){
if(A[v2[j] ][1]<=x){ //
x=A[v2[j] ][1];
}
}for(int j=0;j<v2.size();j++){
if(A[v1[j] ][1]==x){
v3.push_back(v2[j] );
}
}
if(v3.size()>1){
for(int j=0;j<v3.size();j++){
if(A[ v3[j] ][2]<=c){ //
c=A[v2[j] ][2];
}
}
for(int j=0;j<v3.size();j++){
if(A[v3[j] ][2]==c){
v4.push_back(v3[j] );
}
}
if(v4.size()>1){
for(int j=0;j<v4.size();j++){
if( pp[v4[j] ].first > g){
g=pp[v4[j] ].first;
g1=v4[j];
}
}
}else{
g1=v4[0];
g=pp[ v4[0] ].first;
}
}else{
g1=v3[0];
g=pp[ v3[0] ].first;
}
}else{
g1=v2[0];
g=pp[v2[0] ].first;
}
}else{
g1=v1[0];
g=pp[ v1[0] ].first;
}
qq[i].first=g;
qq[i].second=pp[g1].second;
pp[g1].second=101;
i++;
}
for(int i=n-1;i>=0;i--){
te=qq[i].second;
if((int)(qq[i].second+0.9)!=te){
printf("%d %.1f\n",qq[i].first,qq[i].second);
}else{
printf("%d %d\n",qq[i].first,te);
}
}
return 0;
}
C++應該以"一個人"為單位,用struct或class裝起來,會比較好排序
寫一個通用的排序手法
我用struct + sort + compare fucntion + vector,給你參考
我沒有非常熟悉C++,程式碼可能會有缺失的地方,再麻煩留言指正