ランキング - 含む構造体のランキング

タイトル説明

    そこリアルタイムRanklistですが、唯一のトップは、各質問のスコアを考慮せずに、ソート完了までの問題の数に従ってランクが上の今日の検査は、それが最終順位ではありません。入場料を考えると、あなたは降順で、最終的な候補者によってスコア、およびそのパフォーマンスのプリントを見つけるためのプログラムを書きます。

エントリー

    入力はいくつかのテスト情報フィールドテストが含まれています。フィールド当たりの検査最初の情報線は候補N(0 <N <1000)の数を与え 、 試験の数M(0 <M <= 10 )、 スコアライン(正の整数)Gは、2行目の選別は、最初の質問に与えられます。 m個の質問の正の整数値を、N行、各行は、候補のチケット番号(文字列の長さが20を超えない)、総数M解決対象、タイトル、及び質問の数Mそれを与えられます(1からMまで被写体数)。     候補の数が0として読み取る場合、試験の入力端が処理されません。  

輸出

    各試験のために、隙間によって分離されたスコアライン候補番号候補に出力降順にスコアによって最初にn個以上の分数出力の最初の行の行、N行目の候補の数。より多くの候補者よりも同じスコアが、その候補数の昇順出力を押すと

サンプル入力

4 5 25 
10 10 12 13 15 
CS004 3 5 1 3 
CS003 5 2 4 1 3 5 
CS002 2 1 2 
CS001 3 2 3 5 
1 2 40 
10 30 
CS001 1 2 
2 3 20 
10 10 10 
CS000000000000000001 0 
CS000000000000000002 2 1 2 
0

サンプル出力

3 
CS003 60 
CS001 37 
CS004 37 
0 
1 
CS000000000000000002 20

1の#include <stdio.hの>
 2の#include < malloc関数 .H>
 3の#include <アルゴリズム>
 4の#include < 文字列・H>
 5  使って 名前空間STDを、
6  
7のtypedef 構造体STU {
 8      チャー num_P [ 21 ]。
9      int型tol_slv。
10      のint flag_slv [ 12 ]。
11      INT getscore。
12  } STU。
13  ブールCMP(STU S1、S2 STU){
 14      、INT、T =strcmp(s1.num_P、s2.num_P)
 15      IF(s1.getscore == s2.getscore)戻り T < 0 ; // 戻りT <0が上昇側ホイ列比較することを意味
16       戻り s1.getscoreを> s2.getscore;
 17  }
 18は、 INT (メイン){
 19。     INT num_P;
 20である     一方(scanfの(" %のD "、&​​num_P)&& num_P> 0 && num_P < 1000 ){
 21は         INT num_Q、num_G;
 22は         int型 =パス0 ; / / ライン以上の人々のレコード番号
23         scanf関数(" %D%D "、&​​num_Q、&num_G);
 24          INT * Q_ary =(INT *)はmalloc(num_Q * はsizeofINT ));
 25          のためにINT I = 0 {;私は<num_Q I ++)/ / 各質問スコア読み出さ
26である              scanfの(" %のD "、&​​Q_ary [I + 1 ]); // flag_slvと[] ALIGN 
27          }
 28          STU *スチューデント=(STU *)はmallocはsizeof(STU)* num_P)。
 29         INT I = 0 {; I <num_P I ++)// 各生徒データは、初期化のため
30              scanfのを(" %S%D "、学生[I] .nu​​m_P、&学生[I] .tol_slv); // 科学号とにする質問の総数
31である             ためINT J = 0 ; J <学生[I] .tol_slv J ++ ){
 32                  のint POS;
 33である                  (scanfの" %のD "、&POS);
 34である                  スチューデント[I] .flag_slv [POS] = 1 ; // タイトルにする編集位置
35              }
 36          }
37          のためにINT I = 0 ; I <num_P; I ++){ // 各トラバース
38は                 学生[I] .getscore = 0 ; // 初期化
39              のためにINT J = 0 ; J <num_Q; J ++){ // 各質問は、未だなさチェックする累積スコア
40                  IF(スチューデント[I] .flag_slv [J + 1 ]){
 41である                      スチューデント[I] .getscore + = Q_ary [J + 1 ];
 42である                 }
 43は 
44である             }
 45              IF(スチューデント[I ] .getscore> = num_G)を通過++ ;
 46であります 
47          }
 48          であれば(==通る0のprintf()を" 0 \ n " );
49          {
 50              のprintf(" %D \ n " 、パス)。
51              ソート(学生、学生+ num_P、CMP);
52              のためにINT iは= 0 ; I <num_Pは、I ++ ){
 53                  場合は(学生[I] .getscore> = num_G){
 54                      のprintf(" %sの%D \ n " 、学生[I] .nu​​m_P、学生[ i]の.getscore)。
55                  }
56              }
 57  
58          }
 59  
60  
61      }
 62  リターン 0 63 }

 

おすすめ

転載: www.cnblogs.com/debug-the-heart/p/12486957.html