Jim is fond of reading books, and he has so many books that sometimes it's hard for him to manage them. So he is asking for your help to solve this problem.
Only interest in the name, press year and price of the book, Jim wants to get a sorted list of his books, according to the sorting criteria.
Input
The problem consists of multiple test cases.
In the first line of each test case, there's an integer n that specifies the number of books Jim has. n will be a positive integer less than 100. The next n lines give the information of the books in the format Name Year Price. Name will be a string consisting of at most 80 characters from alphabet, Year and Price will be positive integers. Then comes the sorting criteria, which could be Name, Year or Price.
Your task is to give out the book list in ascending order according to the sorting criteria in non-ascendent order.
Note: That Name is the first criteria, Year is the second, and Price the third. It means that if the sorting criteria is Year and you got two books with the same Year, you'd sort them according to their Name. If they equals again, according to their Price. No two books will be same in all the three parameters.
Input will be terminated by a case with n = 0.
Output
For each test case, output the book list, each book in a line. In each line you should output in the format Name Year Price, the three parameters should be seperated by just ONE space.
You should output a blank line between two test cases.
Sample Input
3 LearningGNUEmacs 2003 68 TheC++StandardLibrary 2002 108 ArtificialIntelligence 2005 75 Year 4 GhostStory 2001 1 WuXiaStory 2000 2 SFStory 1999 10 WeekEnd 1998 5 Price 0
Sample Output
TheC++StandardLibrary 2002 108 LearningGNUEmacs 2003 68 ArtificialIntelligence 2005 75 GhostStory 2001 1 WuXiaStory 2000 2 WeekEnd 1998 5 SFStory 1999 10
题目大意:吉姆喜欢读书,他有很多书,有时他很难管理。所以他请求你的帮助来解决这个问题。
只有对书的名字、出版年份和价格感兴趣的时候,吉姆才能根据分类标准得到他书的分类清单。
注意:书名是第一关键字,年份是第二关键字,价格是第三关键字
这意味着,如果排序标准是一年,你有两本书在同一年,你会按照他们的名字排序。如果他们再次平等,根据他们的价格。在这三个参数中,没有两本书是一样的
用结构体存储书的三项信息,然后根据三个不同规则写三个排序标准,利用C++sort函数进行排序。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct Book
{
string name;
int year;
int price;
}book[100];
bool name(Book a,Book b)
{
if(a.name!=b.name)
return a.name<b.name;
else if(a.year!=b.year)
return a.year<b.year;
else
return a.price<b.price;
}
bool year(Book a,Book b)
{
if(a.year!=b.year)
return a.year<b.year;
else if(a.name!=b.name)
return a.name<b.name;
return a.price<b.price;
}
bool price(Book a,Book b)
{
if(a.price!=b.price)
return a.price<b.price;
else if(a.name!=b.name)
return a.name<b.name;
return a.year<b.year;
}
int main()
{
int n;
int first=1;
while(cin>>n&&n)
{
string rule;
for(int i=0;i<n;i++)
cin>>book[i].name>>book[i].year>>book[i].price;
cin>>rule;
if(rule=="Name")
sort(book,book+n,name);
else if(rule=="Year")
sort(book,book+n,year);
else if(rule=="Price")
sort(book,book+n,price);
if(first)
first=0;
else
cout<<endl;
for(int i=0;i<n;i++)
cout<<book[i].name<<" "<<book[i].year<<" "<<book[i].price<<endl;
}
return 0;
}