書式#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)