Excelソート
2053 ワード
Excelでは、レコードのセットを任意の指定された列でソートできます.プログラムを作成して類似の機能を実現してください.
Inputテスト入力には、いくつかのテスト例が含まれています.各試験例の第1行は、2つの整数N(<=10000000)とCを含み、ここで、Nはレコードのストライプ数であり、Cは指定されたソートの列番号である.以下N
行、各行に学生記録が含まれています.各学生レコードは、学号(6桁の数字で、同じグループのテストで重複していない学号)、氏名(8桁を超えずスペースを含まない文字列)、成績(閉区間[0,100]内の整数)で構成され、各項目間は1つのスペースで区切られている.N=0と読むと全ての入力が終了し、対応する結果は出力されない.
Outputは各テストケースに対して、まず1行「Case i:」を出力し、ここでiはテストケースの番号(1から)である.次に、N行において、C=1の場合、学号で並べ替えられる.C=2の場合、名前の非減算辞書順に並べ替える.C=3の場合
の場合は、成績の非減算順に並べ替えます.何人かの学生が同じ名前または同じ成績を持っている場合、彼らの学号によって順番に並べ替えられます.
Sample Input
この問題を書くときは考え方がいいですが、実行時の3番目のソート方法は2番目に聞いてはいけません.最後に聞いてはいけない先輩が、文字列の大きさを直接比較してソートしてはいけないなどの小さな欠点を発見しました.
sortソートでtrueとfalseを返す意味を理解する
Inputテスト入力には、いくつかのテスト例が含まれています.各試験例の第1行は、2つの整数N(<=10000000)とCを含み、ここで、Nはレコードのストライプ数であり、Cは指定されたソートの列番号である.以下N
行、各行に学生記録が含まれています.各学生レコードは、学号(6桁の数字で、同じグループのテストで重複していない学号)、氏名(8桁を超えずスペースを含まない文字列)、成績(閉区間[0,100]内の整数)で構成され、各項目間は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
この問題を書くときは考え方がいいですが、実行時の3番目のソート方法は2番目に聞いてはいけません.最後に聞いてはいけない先輩が、文字列の大きさを直接比較してソートしてはいけないなどの小さな欠点を発見しました.
sortソートでtrueとfalseを返す意味を理解する
#include
#include
#include
using namespace std;
struct Student
{
char num[15];
char name[15];
int mark;
}p[200000];
bool cmp1(Student a,Student b)
{
if(strcmp(a.num,b.num)<0)
return true; //
else
return false; //
}
bool cmp2(Student a,Student b)
{
if(strcmp(a.name,b.name)==0) // int t=strcmp(a.name,b.name);
{ //
if(strcmp(a.num,b.num)<0)
return true; //
else
return false; //
}
else
return strcmp(a.name,b.name)<0; //
}
bool cmp3(Student a,Student b)
{
if(a.mark==b.mark)
{
if(strcmp(a.num,b.num)<0)
return true; //
else
return false; //
}
else
return a.mark