Excelは、任意の列に基づいてレコードをソートすることができます。今、あなたは、この機能を模倣することになっています。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、2つの整数N(≤10含ま5)とを、Nはレコードの数であり、Cはあなたが持つレコードをソートすることになっていることをカラムであるC、。そして、N行は、それぞれの生徒のレコードが含まれ、従ってください。学生の記録は、彼または彼女の明確なID(6桁の数字)、名前(スペースなしなし以上8文字以内の文字列)、およびグレード(0〜100の整数、を含む)で構成されています。
出力仕様:
各テストケースのために、出力N行でソート結果。すなわち、C = 1であれば、その後レコードがIDのに従って昇順にソートしなければなりません。C = 2の場合は、次に記録を名前に係る非減少順にソートされなければなりません。及びC = 3の場合、レコードは、等級に応じて非減少順にソートされなければなりません。同じ名前またはグレードを持っているいくつかの学生がある場合、彼らは彼らのIDの増加順にに従ってソートされなければなりません。
サンプル入力1:
1 3つの
000007ジェームズ85
000010エイミー90
000001ゾーイ60
サンプル出力1:
000001ゾーイ60の
000007ジェームズ85
000010エイミー90
サンプル入力2:
2 4つの
000007ジェームズ85
000010エイミー90
000001ゾーイ60
000002ジェームズ98
出力例2:
000010 90エイミー
・ジェームズ98 000002
ジェームズ・85 000007
ゾーイ60 000001
サンプル入力3:
3 4つの
000007ジェームズ85
000010エイミー90
000001ゾーイ60
000002ジェームズ90
サンプル出力3:
000001ゾーイ60の
000007ジェームズ85
000002ジェームズ・90
000010エイミー90
質問の意味:
参照の一種に、学生の総数は、列の数を入力し、進歩的な学生のID、名前、スコア入力し、最後の出力シーケンシング後の学生のID、名前、スコアを。
アイデア:
(1)ID IDが出力に入力され、代わりに整数のIDが文字列の形式で格納されている生徒、生徒のレコードID、名前、スコア、の構造を定義000001 000001の代わりに1である
上記(2)列の数は、参照の並べ替え、その後、参照の一種に列数の後に、すべての学生のための出力をソートするために決定されたCの値に応じて、設計比較機能CMP1、CMP2、CMP3をクリックします。
コード:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct student{
char id[10],name[10];
int grade;
}stu[100010];
bool cmp1(student a,student b){
return strcmp(a.id,b.id)<0;
}
bool cmp2(student a,student b){
if(strcmp(a.name,b.name)!=0)
return strcmp(a.name,b.name)<0;
else
return strcmp(a.id,b.id)<0;
}
bool cmp3(student a,student b){
if(a.grade!=b.grade)
return a.grade<b.grade;
else
return strcmp(a.id,b.id)<0;
}
int main(){
int N,C;
scanf("%d %d",&N,&C);
for(int i=0;i<N;i++){
scanf("%s %s %d",stu[i].id,stu[i].name,&stu[i].grade);
}
if(C==1){
sort(stu,stu+N,cmp1);
}else if(C==2){
sort(stu,stu+N,cmp2);
}else{
sort(stu,stu+N,cmp3);
}
for(int i=0;i<N;i++){
printf("%s %s %d\n",stu[i].id,stu[i].name,stu[i].grade);
}
return 0;
}