#include < iostream > #include < vector > #include < string > #include < algorithm > using namespace std; struct Grade ... { int nums; int grade; string times; int index;} ;vector < Grade > g; int cnt[ 6 ]; int n; bool cmp1(Grade a, Grade b) ... { if (a.nums==b.nums) return a.times<b.times; else return a.nums>b.nums;} bool cmp2(Grade a, Grade b) ... { return a.index<b.index;} void getGrade() ... { int cnt2[6]=...{0}; for(int i=0;i<n;i++) ...{ if (g[i].nums==5) g[i].grade=100; else if (g[i].nums==0) g[i].grade=50; else ...{ int k=g[i].nums; if (cnt2[k]<cnt[k]) ...{ g[i].grade=55+k*10; cnt2[k]++; } else g[i].grade=50+k*10; } }} bool run() ... { cin >> n; if (n<0) return false; g.resize(n); int i; for(i=0;i<6;i++) cnt[i]=0; for(i=0;i<n;i++) ...{ cin>>g[i].nums >>g[i].times; g[i].index=i; cnt[g[i].nums]++; } sort(g.begin(),g.end(),cmp1); for(i=0;i<6;i++) cnt[i]/=2; getGrade(); sort(g.begin(),g.end(),cmp2); for(i=0;i<n;i++) cout << g[i].grade << endl; cout<<endl; return true;} int main() ... { while(run()); return 0; } 排序的一般方法,还要一点细心。方便起见,用用全局的数组,变量等。