PAT 甲級 1012 The Best Rank【水題】

大晚上寫的,代碼有點亂。

題目是處理數據的,不難。

一開始前兩個樣例沒A,是我想錯了。
我以爲是看每個學生最好的那一科排第幾,應該是:看這個學生哪一個科排名最高。

int gra[2005][5],n;

char g[] = {'C','M','E','A'};

int find_stu(int i){
    int t;
    bool nothave = true;
    for(int j=0;j<n;j++){
        if(gra[j][0] == i){
            t = j;
            nothave = false;
            break;
            }
    }
    if(nothave) return -1;
    return t;
}

int get_rank(int t,int i){
    int grade = gra[t][i];
    int rankk = 1;
    for(int j=0;j<n;j++){
        if(gra[j][i]>grade) rankk++;
    }
    return rankk;
}

int main(){

    int x,m,i=0,rankkk[4];
    scanf("%d %d",&n,&m);
    int nn = n;
    while(nn--){
        scanf("%d %d %d %d",&gra[i][0],&gra[i][1],&gra[i][2],&gra[i][3]);
        gra[i][4] = round((double(gra[i][1]+gra[i][2]+gra[i][3]))/3);
        i++;
    }

    while(m--){
        scanf("%d",&x);
        int t = find_stu(x);//找到學生索引
        if(t == -1) {
            printf("N/A");
            if(m!=0) printf("\n");
            continue;
        }

        rankkk[0] = get_rank(t,1);
        rankkk[1] = get_rank(t,2);
        rankkk[2] = get_rank(t,3);
        rankkk[3] = get_rank(t,4);

        int maxrank = rankkk[0];
        int sub = 0;

        for(int i=0;i<3;i++){
            if(rankkk[i]<maxrank){
                maxrank = rankkk[i];
                sub = i;
            }
        }
        if(rankkk[3]<=maxrank){
            maxrank = rankkk[3];
            sub = 3;
        }
        printf("%d %c",maxrank,g[sub]);
        if(m!=0) printf("\n");
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章