タイトルの記録を行います--day54

書式#include <stdio.hに> 
する#include < 文字列の.h> 
の#include <iostreamの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
構造体学生{
     チャーレグナム[ 100 ]。
    int型のスコア。
    int型のLISTNUM。
    int型のランク。
    int型のlocalrank。
} STU [ 30010 ]。
ブールCMP(学生A、学生B)
{ 
    場合(a.score =!b.score)
         リターン > a.score b.score。
    リターンのstrcmp(a.regnum、b.regnum)<0 ; 
} 
int型のmain()
{ 
    int型N、K。
    scanf関数(" %のD "、&N)
    int型のカウント= 0 ;
    INT N2 = N。
    一方、(N-- 
    { 
        scanf関数(" %のD "、&K)。
        int型の温度= 数えます。
        以下のためにint型 i = 1 ; iは= Kを<I ++の
        { 
            scanf関数(" %sの%のD "、STU .regnum [カウント]、&とSTU .score [カウント]); 
            STU [カウント ++] LISTNUM = N2-。N。
        } 
        ソート(STU + TEMP、+カウントSTU、CMP)を、
        STU [TEMP] .localrank = 1 int型 I = TEMP + 1 ; iは数<; iは++ 
        { 
            場合(STU [I] .score == STU [I- 1 ] .score)
                STU [I] .localrank = STU [I- 1 ] .localrank。
            
                STU [i]は.localrank = I-TEMP + 1 
        } 
    } 
    ソート(STU、STU +)、CMPを数えます。
    printf(" %d個の\ nを" 、カウント); 
    STU [ 0 ] = .rank 1 以下のためにint型 i = 1 ; iは数<; iは++ 
    { 
        場合(STU [I] .score == STU [I- 1 ] .score)
            STU [I] .rank = STU [I- 1 ] .rank。
        他の
            STU [i]は.rank = I + 1 ; 
    } 
    のためにint型 i = 0 ; iは数<; iは++ 
        のprintf(" %sの%D%D%D \ n "この[] .regnum、この[] .rank、この[] .listnum、この[ザ] .localrank)。
    リターン 0 ; 
}
コードの表示

タイトルテンプレートのPAT A1025ソート

ソート(STU、STU +カウント、CMP)

STUは、位置、STU +のカウントを開始する配列が最後のプラスだったです

左右閉開

構造体の時間内のCMPはカスタマイズ可能です。CMPは、条件の真で照合ということです

そのような戻りa.score> b.scoreソート真では、高スコアの時説明CMPは、元の状態を維持することである、それは下降アレイ、前に最高スコアことが記載されて移動しません

また、数が同じ分数の場合はサイズによってソートされたことに注意してください。

localrankは、別の行に入らないように、将来的にプロセス入力のうちショットです。直接ソート(STU +一時、STU +カウント、CMP)

おすすめ

転載: www.cnblogs.com/tingxilin/p/11616383.html