A1025 PAT Ranking (25分)

考察:考場(chǎng)內(nèi)排序李滴,考場(chǎng)外又排序一次,兩次排序

learn && wrong:
1测摔、考場(chǎng)號(hào)置為i就行了置济,而不是人數(shù),第二個(gè)輸入數(shù)字是人數(shù)锋八,你搞錯(cuò)了
2浙于、結(jié)構(gòu)體名字跟結(jié)構(gòu)體數(shù)組名字沖突了,cmp做參數(shù)就不知道哪一個(gè)了
3挟纱、sort函數(shù)可以對(duì)二維數(shù)組用行排列
4羞酗、得出序號(hào),第一個(gè)設(shè)置序號(hào)設(shè)置為1紊服,借來(lái)for循環(huán)檀轨,如果相同,則與前一個(gè)相同欺嗤,不同則下標(biāo)+1
5参萄、結(jié)構(gòu)體不設(shè)排序號(hào),直接輸出排序號(hào)剂府,就是設(shè)一個(gè)變量+一個(gè)循環(huán)

id(i > 0 && stu[i].score != stu[i - 1].score){
 r = i + 1;
}
//pritnf之類或者stu[i].r = r拧揽;

6、這招不錯(cuò)腺占,頂一個(gè)int型變量淤袜,沒(méi)讀入一個(gè)考生,就讓num自增衰伯,當(dāng)讀取完一個(gè)考場(chǎng)的考生信息铡羡,(假設(shè)該考場(chǎng)有k個(gè)考生)后,這個(gè)考場(chǎng)的考生所對(duì)應(yīng)的數(shù)組下標(biāo)區(qū)間為【num - k意鲸,num)


輸入:
1烦周、考場(chǎng)數(shù)
2、考場(chǎng)人數(shù)
3怎顾、考生號(hào)+分?jǐn)?shù)(13位+0~100分
考場(chǎng)小于100個(gè)读慎,每個(gè)考場(chǎng)小于300人

輸出:
registration_number final_rank location_number local_rank
以分?jǐn)?shù)排序,如果分?jǐn)?shù)相同槐雾,則考生號(hào)以字典序小的排序
同樣分?jǐn)?shù)同樣內(nèi)的排名

編程思想:
1夭委、結(jié)構(gòu)體數(shù)組:準(zhǔn)考證,分?jǐn)?shù)募强,考場(chǎng)號(hào)株灸,考場(chǎng)內(nèi)的排名崇摄,總排名,30010個(gè)慌烧,

輸入考場(chǎng)號(hào)逐抑,然后輸入每個(gè)考場(chǎng)內(nèi)考生,注意把結(jié)構(gòu)體數(shù)組標(biāo)記考場(chǎng)號(hào)
然后排序考場(chǎng)內(nèi)的
2屹蚊、
再排序總的厕氨,然后輸出總的,輸出各項(xiàng)數(shù)據(jù)
注意:因?yàn)槎S數(shù)組不知道如何給序號(hào)淑翼,所以整個(gè)復(fù)制過(guò)來(lái)再排序

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

struct student{
    char id[15];//考生號(hào)
    int score; //分?jǐn)?shù)
    int test_location;//考場(chǎng)號(hào)
    int local_rank; //考場(chǎng)內(nèi)排名
    int final_rank; //總排名
}stu[101][301], stu1[30001]; //前面考場(chǎng)號(hào)腐巢,后面考生號(hào)比較好!


bool cmp(student a, student b) { //比較函數(shù),按分?jǐn)?shù)排名玄括,如果相同冯丙,則按字典序從大到小  (!T饩N赶А)名詞跟數(shù)組名字沖突了
    if (a.score != b.score) return a.score > b.score;
    else return strcmp(a.id, b.id) < 0;
}

int main()
{
    int total;
    cin >> total; //幾個(gè)考場(chǎng)
    //int sum = 0; 統(tǒng)計(jì)總?cè)藬?shù)
    int sum[101];//累計(jì)總?cè)藬?shù)數(shù)組
    

    for (int i = 0;i < total;++i) { //(!!!)太笨了,用一個(gè)循環(huán)澳牡瘛船殉!
        int local;
        cin >> local; //人數(shù)
        //sum += local; 每次輸入人數(shù)還要累加總?cè)藬?shù),不能這么做,用一個(gè)數(shù)組來(lái)把每個(gè)考場(chǎng)的人數(shù)添加進(jìn)來(lái)
        sum[i] = local;

        for (int j = 0;j < local;++j) {
            cin >> stu[i][j].id >> stu[i][j].score; //輸入id和分?jǐn)?shù)
            stu[i][j].test_location = i + 1; //修改考場(chǎng)號(hào)
        }

        
        sort(stu[i], stu[i] + local, cmp);//考場(chǎng)內(nèi)排序   (!!!)應(yīng)該可以的

        stu[i][0].local_rank = 1; //(!!!)得出考場(chǎng)內(nèi)排名斯嚎,注意利虫,排序跟得出序號(hào)是完全不一樣的
        for (int k = 1;k < local;k++) { 
            //(!!!)得出排名的第一步,一定要弄第一個(gè)為1堡僻,然后k = 1開(kāi)始
            if (stu[i][k].score == stu[i][k - 1].score) {
                stu[i][k].local_rank = stu[i][k - 1].local_rank;
            }
            else {
                stu[i][k].local_rank = k + 1; //(!!!)注意是k + 1;
            }
        }
    }

    int sum1 = 0;
    for (int i = 0;i < total;i++){ //累計(jì)總?cè)藬?shù)
        sum1 += sum[i];
    }


   //總排名的排序來(lái)一次,仍舊是糠惫,然后排名怎么弄,算了我直接再開(kāi)一個(gè)數(shù)組好了钉疫,然后復(fù)制過(guò)來(lái)...
    /* 這個(gè)排序是錯(cuò)的硼讽!
    sort(student, student + sum1;cmp); //總的排序
    student[0][0].final_rank = 1;
    int z = 0;
    for (int j = 1;j < sum[j];++j) {  //(!I蟆9谈蟆)新花樣,雙重?cái)?shù)組的排名,有點(diǎn)區(qū)別城菊,應(yīng)該讓第一排單獨(dú)一個(gè)循環(huán)备燃,然后之后就是雙重循環(huán)了
        if (student[z][j] == student[z][j - 1]) {
                student[z][j].final_rank = student[z].final_rank;
        }else{
                student[z][j].final_rank = j + 1;
        }
    }
    ++z;
    for (; z < total;z++) { //(!!!)總的排序我不會(huì)。凌唬。赚爵。、
        for(int j = 0;)
    }
    */

    int num = 0; //整個(gè)復(fù)制過(guò)來(lái),并且總?cè)藬?shù)也知道了
    for (int i = 0;i < total;++i) {
        for (int j = 0;j < sum[i];++j) {
            stu1[num++] = stu[i][j];
        }
    }

    printf("%d\n", num); //輸出人數(shù)
    sort(stu1, stu1 + num,cmp);
    int r = 1;
    for (int i = 0;i < num;i++) { //(!!!)不修改排名直接輸出冀膝,也不錯(cuò)
        if (i > 0 && stu1[i].score != stu1[i - 1].score) {
            r = i + 1; //當(dāng)前考生與上一個(gè)考生分?jǐn)?shù)不同時(shí),讓r更新為人數(shù)+1
        }
        printf("%s ", stu1[i].id);
        printf("%d %d %d\n", r, stu1[i].test_location, stu1[i].local_rank);
    }
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霎挟,一起剝皮案震驚了整個(gè)濱河市窝剖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酥夭,老刑警劉巖赐纱,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異熬北,居然都是意外死亡疙描,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)讶隐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)起胰,“玉大人,你說(shuō)我怎么就攤上這事巫延⌒澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵炉峰,是天一觀的道長(zhǎng)畏妖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疼阔,這世上最難降的妖魔是什么戒劫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮婆廊,結(jié)果婚禮上迅细,老公的妹妹穿的比我還像新娘。我一直安慰自己否彩,他們只是感情好疯攒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著列荔,像睡著了一般敬尺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贴浙,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天砂吞,我揣著相機(jī)與錄音,去河邊找鬼崎溃。 笑死蜻直,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播概而,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呼巷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赎瑰?” 一聲冷哼從身側(cè)響起王悍,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎餐曼,沒(méi)想到半個(gè)月后压储,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡源譬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年集惋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踩娘。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刮刑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出霸饲,到底是詐尸還是另有隱情为朋,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布厚脉,位于F島的核電站习寸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏傻工。R本人自食惡果不足惜霞溪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望中捆。 院中可真熱鬧鸯匹,春花似錦、人聲如沸泄伪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蟋滴。三九已至染厅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間津函,已是汗流浹背肖粮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尔苦,地道東北人涩馆。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓行施,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親魂那。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛾号,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容