EXCELソートHDU-1862
EXCELソート
Excelでは、レコードのセットを任意の指定された列でソートできます.プログラムを作成して類似の機能を実現してください.Inputテスト入力には、いくつかのテスト例が含まれています.各試験例の第1行は、2つの整数N(<=10000000)とCを含み、ここで、Nはレコードのストライプ数であり、Cは指定されたソートの列番号である.以下にN行あり、各行に学生記録が含まれている.各学生レコードは、学号(6桁の数字で、同じグループのテストで重複していない学号)、氏名(8桁を超えずスペースを含まない文字列)、成績(閉区間01000100内の整数)からなり、各項目間は1つのスペースで区切られている.N=0と読むと全ての入力が終了し、対応する結果は出力されない.Outputは各テストケースに対して、まず1行「Case i:」を出力し、ここでiはテストケースの番号(1から)である.次に、N行において、C=1の場合、学号で並べ替えられる.C=2の場合、名前の非減算辞書順に並べ替える.C=3の場合、成績の非減算順に並べ替えます.何人かの学生が同じ名前または同じ成績を持っている場合、彼らの学号によって順番に並べ替えられます.Sample Input 3 1 000007 James 85 000010 Amy 90 000001 Zoe 60 4 2 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 98 4 3 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 90 0 0 Sample Output Case 1: 000001 Zoe 60 000007 James 85 000010 Amy 90 Case 2: 000010 Amy 90 000002 James 98 000007 James 85 000001 Zoe 60 Case 3: 000001 Zoe 60 000007 James 85 000002 James 90 000010 Amy 90
#include
#include
#include
using namespace std;
struct node{
char a[10];
char b[10];
int c;
}s[100005]; // , ;
bool cmp1(node i,node j){
if(strcmp(i.a,j.a)<0) return true;
else return false;
} // ;
bool cmp2(node i,node j){
if(strcmp(i.b,j.b)<0)
return true;
if(strcmp(i.b,j.b)>0)
return false;
if(strcmp(i.b,j.b)==0)
return cmp1(i,j);
} // , cmp1;
bool cmp3(node i,node j){
if(i.creturn true;
if(i.c>j.c)
return false;
if(i.c==j.c)
return cmp1(i,j);
} // , cmp1;
int main()
{
int N,C;
int k=1;
while(scanf("%d%d",&N,&C)&&N!=0){
for(int i=0;iscanf("%s",s[i].a);
scanf("%s",s[i].b);
scanf("%d",&s[i].c);
}
printf("Case %d:
",k++);
if(C==1){
sort(s,s+N,cmp1);
}
if(C==2){
sort(s,s+N,cmp2);
}
if(C==3){
sort(s,s+N,cmp3);
}
for(int i=0;iprintf("%s %s %d
",s[i].a,s[i].b,s[i].c);
}
}
return 0;
}