1. 程式人生 > 實用技巧 >結構體排序教學

結構體排序教學

排名
寧波市的小學生們在鎮海中學完成程式設計比賽後,老師們批出了所有學生的成績,成績按分數從高到低排名,成
績相同按年級從低到高排(注:純屬虛構,請勿對號入座)。現在主辦單位想知道每一個排名的學生前,有幾位學
生的年級低於他(她)。
輸入
有若干行:
第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;
}