結構體排序教學
阿新 • • 發佈:2020-09-16
排名
寧波市的小學生們在鎮海中學完成程式設計比賽後,老師們批出了所有學生的成績,成績按分數從高到低排名,成
績相同按年級從低到高排(注:純屬虛構,請勿對號入座)。現在主辦單位想知道每一個排名的學生前,有幾位學
生的年級低於他(她)。
輸入
有若干行:
第1行只有一個正整數n(1≤n≤200),表示參賽的學生人數。
第2行至第n+1行共n行,每行有兩個正整數s(0≤s≤400),g(1≤g≤6)。
其中第i+1行的第一個數s表示第i個學生的成績,第i+1行的第二個數g表示第i個學生的年級。
輸出
有n行,每行只有一個正整數
其中第i行的數k表示排第i名的學生前面有k個學生排名比他(她)高,且年級比他(她)低。
23
250 4
220 2
20 4
290 2
370 6
210 2
360 1
180 1
200 2
170 3
50 6
300 6
150 1
400 6
90 2
390 6
100 2
380 5
350 2
310 4
40 6
0 6
320 3
樣例輸出
0
0
0
1
0
1
2
3
5
1
4
1
1
1
0
7
0
3
3
15
15
12
16
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; struct cj{ int nianji; int chengji; // int wz; }; bool cmp(cj a,cj b) { if(a.chengji>b.chengji) return 1; if(a.chengji<b.chengji) return 0; if(a.nianji<b.nianji) return 1; else return 0; } cj a[210]; int v[210]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i].chengji>>a[i].nianji; //a[i].wz=i; } sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++) { int sum=0; for(int j=1;j<i;j++) //經過排序後,在i前面的均是成績高於i的 if(a[i].nianji>a[j].nianji) sum++; v[i]=sum; } for(int i=1;i<=n;i++) cout<<v[i]<<endl; return 0; }