3. [2007年NOIP普及组] 奖学金(待敲代码)(待复习排序)!!!!!!!!!
题目描述:
简单来说就是语文英语数学总分和学号,总分>语文>学号的优先级来排序
思路1:
结构体模拟过程(1代表从大到小)
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int n; 5 struct student{ 6 int yw; 7 int sx; 8 int yy; 9 int num; 10 int sum; 11 }a[305]; 12 bool cmp(student a,student b) 13 { 14 if(a.sum>b.sum) return 1; 15 else if(a.sum<b.sum) return 0; 16 else 17 { 18 if(a.yw>b.yw)return 1; 19 else if(a.yw<b.yw) return 0; 20 else { 21 if(a.num<b.num)return 1; 22 else return 0; 23 } 24 } 25 } 26 int main() 27 { 28 cin>>n; 29 for(int i=1;i<=n;i++) 30 { 31 cin>>a[i].yw>>a[i].sx>>a[i].yy; 32 a[i].num=i; 33 a[i].sum=a[i].yw+a[i].sx+a[i].yy; 34 } 35 sort(a+1,a+n+1,cmp); 36 for(int i=1;i<=5;i++) 37 cout<<a[i].num<<" "<<a[i].sum<<endl; 38 return 0; 39 }
思路2:
(来自元首大人)
1.将语文排序(这个也需要稳定吗?,语文成绩一样时学号
2.在此基础上对总分进行稳定排序(保证语文优先的顺序不变)
!!!需要复习归并排序等算法