PTA :.道徳的およびC ++でのB1015

道徳的にB1015と

宋王朝の歴史家司馬光は、有名な「道徳的な理論は、」「ミラー」であり、「聖人の実際の発生が馬鹿で、Rubyはちょうど、紳士のものだったこと全部、高潔高潔と死を行うには手術を取る人、剛ない聖人。悪役のこと、そして紳士で、その悪役だった、愚か者としてありませんでした。」Shengde
今の候補者が道徳的、スコアの数が与えられ、司馬光理論に基づいてください。与えられた入場ランキング。

入力フォーマットは:
最初の行の入力は、それぞれ、3つの正の整数を与える:N(≤105)、即ち、候補の総数は、L(≥60)、候補に対する最低スコア、すなわち、デしない点とCaifenを-ないCaifenデポイントとこの線の下には、このようなことにより、「全好最良の」候補として定義されるH(<100)、優先入場線; L入場のために考慮の対象候補以下道徳的から降順; Caifenが、ライン候補に割り当てられたデないクラスもなく、最初のカテゴリ候補の背後に、スコアによってソートされた、「ルビーだけ」であり、スコアは道徳的低かったですしかし、第2カテゴリー候補者の背後に、スコアによってソートされた候補者Hが、以下Caifen・デ・ポイントは、「死んだと高潔」ですが、「ルビーのみ」の人があるよりも、;他の低ラインLを候補者はまたに応じて取捨選択が、第三のカテゴリーの候補の背後にあります。
次いで、N行は、各列であって、被検者の情報を与える:・デ・ポイントは、8ビットの整数であるCaifenチケット番号、チケット番号は、整数内[100、0]道徳間隔を分割しました。数字の間のスペースで区切られています。

出力フォーマット:
最初のライン出力は、第1候補は、入力指示の順に列挙された規則に従って、入力フォーマット候補の出力に応じて、その後、M行、最小スコアMに到達するために各列を候補の数が与えられます。それらのデポイントに従って降順に同一のうち特定の候補以上存在する場合に、デ点は、出力チケット番号の昇順に結びついている場合。

サンプル入力:

60 80 14
10000001 90 64
10000002 60 90
10000011 80 85
10000003 80 85
10000004 85 80
10000005 77 82
10000006 76 83
10000007 78 90
10000008 79 75
10000009 90 59
10000010 45 88
10000012 100 80
10000013 99 90
10000014 66 60

出力例:

12
10000013 99 90
10000012 100 80
10000003 80 85
10000011 80 85
10000004 85 80
10000007 78 90
10000006 76 83
10000005 77 82
10000002 60 90
10000014 60 66
10000008 79 75
10000001 64 90

アイデア:

  1. タイトル質問の顔は、実際には、ソート基準を見回し。彼の道徳的なポイントに応じて分類されている学生は、彼らは5つのカテゴリーに分かれています。第五クラスは、Lが失敗しているよりも、道徳的なポイントが下げるあり、道徳的な点は以上で H、生徒のクラスであり、DEが少ないH以上ではない、それはあまりH、第二の学生よりも、デHしかし残念ながら、それは、ドイツの分割よりも低い以上の第三のカテゴリーとして、前、残りは第4のクラスです。
  2. なぜそれが必要がありません未満斜体、注文およびサンプル出力は、1つまたは2つが同じでないた見つけたとき、それがチェックするのが最善の方法ですので、あまり等しくない記号になることです、そして自分自身に行く見てみると比較機能
  3. 、スコアの降順によって同じカテゴリ、スコアの降順によって同じスコア;小さなによって同じチケット大きい(使用文字列に昇順に学生カテゴリに最初よれば、ソート被験者の要求に応じて比較関数について比較のためのヘッダファイルのstrcmp関数)
  4. 最終的な出力coutの場合、プログラムは<<演算子を書き換えることを聞いてきます。その利便性のため、私は直接のprintf出力を使用します
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct student
{
 char id[9];
 int score_d,score_c;
 int score;
 int part;
};
bool compare(student a,student b)
{
 if(a.part!=b.part) return a.part<b.part;
 else if(a.score!=b.score) return a.score>b.score;
 else if(a.score_d!=b.score_d) return a.score_d>b.score_d;
 else return strcmp(a.id,b.id)<0;//号小的在前面 
}
int main()
{
 int n;//考生数
 int l,h;
 cin>>n>>l>>h;
 student s[n];
 int num=n;//及格学生数 
 for(int i=0;i<n;i++)
 {
  cin>>s[i].id>>s[i].score_d>>s[i].score_c;
  s[i].score=s[i].score_c+s[i].score_d;
  if(s[i].score_c<l||s[i].score_d<l)
  {
   s[i].part=5;//第五类学生
   num--; 
   }
  else if(s[i].score_c>=h&&s[i].score_d>=h)
   s[i].part=1;
  else if(s[i].score_c<h&&s[i].score_d>=h)//注意这里的大于等于 
   s[i].part=2;
  else if(s[i].score_d<h&&s[i].score_c<h&&s[i].score_c<=s[i].score_d)
   s[i].part=3;
  else s[i].part=4; 
 }
 sort(s,s+n,compare);
 cout<<num<<endl;
 for(int i=0;i<num;i++)
 {
  printf("%s %d %d\n",s[i].id,s[i].score_d,s[i].score_c);
//  cout<<s[i].id<<" "<<s[i].score_d<<" "<<s[i]<<s[i].score_c<<endl;
 }
 return 0;
}
公開された29元の記事 ウォンの賞賛1 ビュー950

おすすめ

転載: blog.csdn.net/qq_44654498/article/details/104703943