8. 成績(jī)排序Ⅱ

題目描述

用一維數(shù)組存儲(chǔ)學(xué)號(hào)和成績(jī),然后,按成績(jī)排序輸出。

輸入描述:

輸入第一行包括一個(gè)整數(shù)N(1<=N<=100),代表學(xué)生的個(gè)數(shù)。
接下來(lái)的N行每行包括兩個(gè)整數(shù)p和q,分別代表每個(gè)學(xué)生的學(xué)號(hào)和成績(jī)。

輸出描述:

按照學(xué)生的成績(jī)從小到大進(jìn)行排序,并將排序后的學(xué)生信息打印出來(lái)。
如果學(xué)生的成績(jī)相同,則按照學(xué)號(hào)的大小進(jìn)行從小到大排序。

示例1

輸入

3
1 90
2 87
3 92

輸出

2 87
1 90
3 92

解法
#include<stdio.h>
#include<malloc.h>

void swap(int* a, int* b){
    int temp = 0;
    temp = *a;
    *a = *b;
    *b = temp;
} 

int main(){
    int n = 0;    //人數(shù)
    while(scanf("%d", &n) != EOF){
        int *number = (int *) malloc (sizeof(int) * n);    //學(xué)號(hào)
        int *grade = (int *) malloc (sizeof(int) * n);    //成績(jī)
        for(int i = 0; i < n; i++){
            scanf("%d", &number[i]);
            scanf("%d", &grade[i]);
        }
        for(int i = 0; i < n - 1; i++)
            for(int j = 0; j < n - 1 - i; j++){    //冒泡排序 
                if(grade[j] > grade[j + 1]){
                    swap(&grade[j], &grade[j + 1]);
                    swap(&number[j], &number[j + 1]);
                } 
                if(grade[j] == grade[j + 1])
                    if(number[j] > number[j + 1]){
                        swap(&grade[j], &grade[j + 1]);
                        swap(&number[j], &number[j + 1]);
                    }  
            }
        
        for(int i = 0; i < n; i++)
            printf("%d %d\n", number[i], grade[i]);
        free(number);
        free(grade);
    }
    return 0;
}

在之前的代碼里面,我都是這樣動(dòng)態(tài)分配數(shù)組

 while(scanf("%d", &n) != EOF){
        int number[n];    //學(xué)號(hào)
        int grade[n];    //成績(jī)

經(jīng)提醒,C / C++ 語(yǔ)言是不允許這樣操作的,但不知為何無(wú)論是本地編譯器還是OJ都能通過(guò),希望了解的小伙伴們解釋一下,現(xiàn)在的程序我都改用規(guī)范寫(xiě)法了,也就是本題中這樣

while(scanf("%d", &n) != EOF){
        int *number = (int *) malloc (sizeof(int) * n);    //學(xué)號(hào)
        int *grade = (int *) malloc (sizeof(int) * n);    //成績(jī)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容