EXCELソート(sort構造体ソート)


クリックしてリンクを開く
EXCELソート
Excelでは、レコードのセットを任意の指定された列でソートできます.プログラムを作成して類似の機能を実現してください.
Inputテスト入力には、いくつかのテスト例が含まれています.各試験例の第1行は、2つの整数N(<=10000000)とCを含み、ここで、Nはレコードのストライプ数であり、Cは指定されたソートの列番号である.以下N
行、各行に学生記録が含まれています.各学生記録は、学号(6桁の数字で、同じグループのテストで重複していない学号)、氏名(8桁を超えずスペースを含まない文字列)、成績(閉区間
0100の整数)で構成され、各項目間に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

问题解:この问题はsortの顺位を学んだ后でとても简単で、しかし问题をする时あまりにせっかちで、问题の意味を理解していないで、ずっと间违って、まだ问题の与えるデータの范囲をはっきり见ていないで、初めの时ずっとREが现れて、
その後、問題をよく見てみると、「成績の非漸減順に並べ替えます.何人かの学生が同じ名前や同じ成績を持っているときは、彼らの学号で並べ替えます」という意味が間違っていました.私は2つの意味に理解しました.1つは成績が同じ場合、2つは名前が同じ場合ですが、この問題の意味はそうではありません.この問題の意味は主に成績の大きさで並べ替えているということです.成績が同じとき、特別な状況を考えてみると、こんなに簡単です.次は、変更されたコードです.
#include
#include
#include
#include
#include
using namespace std;
struct P
{
	char X[50];//  
	char name[100];
	int C;//  
}p[900000];
bool cmp1(P a,P b)
{
	int t=strcmp(a.X,b.X);
	if(t==-1)
	return true;
	else
	return false; 
}
bool cmp2(P a,P b)
{
	int t=strcmp(a.name,b.name);
	int k=strcmp(a.X,b.X); 
	 if(t==0)
	{
		if(k==-1)
		return true;
		else
		return false;
	}
	else
	{
		if(t==-1)
		return true;
		else
		return false;
	}
	
}
bool cmp3(P a,P b)
{
    int t=strcmp(a.name,b.name);
    int k=strcmp(a.X,b.X);
	 if(a.C==b.C)
	{
		if(k==-1)
    	return true;
    	else
    	return false;
	}
	else
	{
		return a.C