単位が0であれば1、この問題をしなかったこと、採点されません
ユニットが負の場合2は、それが間違った問題を表し、傾斜されることはありません
そう長い単位であるように、正の数は、この問題の説明を行った(括弧内か否か)、傾斜します
名前と結果が含ま括弧の容易な取扱いのための文字列として読み込まれます
文字列の末尾を確認した後に「」読み込まれている)かどうかを別のブラケット(ブラケット、特定のグレードの存在がある場合)を判断することができます
構造を容易にするために、カスタムを実装するために比較関数をソート使用/カスタム関数/することができます
当然のことながら、アレイを使用しない構造が一般に置き換えることができます
ライブラリを使用しないソートアルゴリズムを行うためにこれら二つの基本的なバブルソートを選択するために使用することができます(場合には何のタイムカードは存在しません)
アプローチ1:C /いいえ構造/いいえソート
1 / * 2 StelaYuri書かにより 3 2019年8月22日に 4 * / 5の#include <stdio.hの> 6の#include < 文字列・H> 7 INT メイン(){ 8 INT I、U、P、N、M 、TM [ 10000 ]、AC [ 10000 ]、POI = 0 、TMD、WTD、ID、DT。 9 チャー NM [ 10000 ] [ 11 ]、CD [ 11 ]、K。 10 のscanf(" %D%D "、&N、&M)。 11 一方(scanf関数(" %sの"NM [POI])!= EOF){ 12 TM [POI] = 0 ; 13 AC [POI] = 0 ; 14 のために(私は= 0、I <N; I ++ ){ 15 のscanf(" %dを」、 &DT)、 16 であれば(DT> 0 ){ 17 、AC [POI] ++ ; 18 TM [POI] + = DT; 19 のscanf(" %のC "、&K)、 20 であれば(K == ' ('){ 21 のscanf(" %D%* C "、&DT)。 22 TM [POI] + = DT * M。 23 } 24 } 25 } 26 ポイ++ 。 27 } 28 のためには、(iは= 0 ; I <POI; I ++)// 排序 29 のための(U = poi- 1、U> I; u-- ) 30 であれば(AC [U]> AC [U- 1 ] | | AC [U] == [U- AC 1 ] && TM [U] <[U- TM 1 ] || AC [U] ==交流[U- 1] && TM [U] == U-TM [ 1 ] &&のstrcmp(U-NM [ 1 ]、NM [U])> 0 ){ 31 、ID = AC [U]。 32 AC [U] = AC [U- 1 ]。 33 AC [U- 1 ] = ID。 34 ID = TM [U]。 35 TM [U] = TM [U- 1 ]。 36 [U- TM 1 ] = ID。 37 strcpyの(CD、NM [U])。 38 strcpyの(NM [U]、NM [U- 1 ])。 39 strcpyの(NM [U-1 ]、CD)。 40 } 41 のためには、(iは= 0 ; I <POI; I ++ ) 42 のprintf(" %-10s%2D%4D \ n " 、NM [I]、AC [i]は、TM [I])。 43 44 戻り 0 ; 45 }
アプローチ2:C ++ /構造/ソート
1 / * 2 書かによりStelaYuri 3 * / 4の#include <cstdioを> 5の#include <CStringの> 6の#include <アルゴリズム> 7 使って 名前空間STDを、 8 構造体ノード{ 9 チャー名[ 15 ]。 10 int型の合計、AC; 11 } STU [ 10000 ]。 12 INT M。 13 チャー DAT [ 15 ]。 14 INT getDigit(int型 L、INT R){ 15 INT iは= L、RES = 0、F = 1 。 16 であれば(DAT [I] == ' - ' ){ 17 F = - 1 。 18 I ++ ; 19 } 20 のために(; I <R、I ++ ) 21の RES = RES * 10 + DAT [I] - ' 0 ' 。 22 リターン * F RES。 23 } 24 INT getDScore(INT LEN){ 25 INT I。 26 のための式(I =0 ; I <lenは、I ++ ) 27 であれば(DAT [I] == ' (' ) 28 ブレーク; 29 リターン getDigit(0、I)+ M * getDigit(I + 1、len- 1 ); 30 } 31 BOOL CMP (ノードA、ノードB){ 32 であれば(!a.ac = b.ac) 33 リターン a.ac> b.ac、 34 であれば(!a.sum = b.sum) 35 リターン a.sum < B。合計、 36 の戻りのstrcmp(a.name、b.name)== - 1 。 37 } 38 INT メイン(){ 39 INT N、I、T = 0 、lenを、D。 40 のscanf(" %D%D "、&N、&M)。 41 一方(scanf関数(" %sの"、STU [T] .nameの)=!{EOF) 42 のための(iは= 1 ; <I = N; I ++ ){ 43 のscanf(" %sの" 、DAT)。 44 LEN = STRLEN(DAT)。 45 であれば(DAT [len- 1 ]!= ' )' ){ 46 D = getDigit(0 、LEN)。 47 であれば(D> 0 ){ 48 STU [T] .SUM + = D。 49 STU [T] .AC ++ ; 50 } 51 } 52 他{ 53 STU [T] + = .SUM getDScore(LEN)。 54 STU [T] .AC ++ 。 55 } 56 } 57 T ++ 。 58 } 59 発信(STU、STU + T、CMP)。 60 のために(私は= 0 ; I <T、I ++ ) 61 のprintf(" %-10s%2D%4D \ n " 、STU [I] .nameの、STU [I] .AC、STU [I] .SUM)。 62 63 リターン 0 ; 64 }