题目简要:
问题由多个测试用例组成。
在每个测试用例的第一行,有一个整数n,指定吉姆的书数。 n将是小于100的正整数。接下来的n行以名称年价格的格式给出书籍的信息。名称将是一个字符串,从字母表中最多有80个字符,年份和价格将是正整数。然后是排序标准,可以是名称,年份或价格。
您的任务是根据排序标准以非升序顺序升序排列图书列表。
注意:该名称是第一个条件,年是第二个,价格第三个。这意味着如果排序标准是“年”,并且您有两本具有相同年份的图书,则可以根据其姓名对它们进行排序。如果他们再次相等,根据他们的价格。没有两本书将在所有三个参数相同。
输入将由n = 0的情况终止。
对于每个测试用例,输出书目列表,每本书在一行中。在每一行,你应该输出格式名称年价格,三个参数应该只由一个空格分隔。
您应该在两个测试用例之间输出空行。
例如:
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
解题思路:
这道题就是一个比较数组的问题,其实思路并不难,只需要比较就好了,首先先输入数据,分成三组输入,然后判断排序,过三个bool型的函数调用实现,最后按要求输出即可。
附代码:
#include <bits/stdc++.h> using namespace std; struct book { string a; int b; int c; }d[100]; bool CompareName(book e,book f) { if (e.a!=f.a) return e.a<f.a; else if (e.b!=f.b) return e.b<f.b; else return e.c<f.c; } bool CompareYear(book e,book f) { if (e.b!=f.b) return e.b<f.b; else if (e.a!=f.a) return e.a<f.a; else return e.c<f.c; } bool ComparePrice (book e,book f) { if (e.c!=f.c) return e.c<f.c; else if (e.a!=f.a) return e.a<f.a; else return e.b<f.b; } int main() { int n,j=0; while (cin>>n) { if (n==0) break; int i; string w; for (i=0;i<n;i++) cin>>d[i].a>>d[i].b>>d[i].c; cin>>w; if (w=="Name") sort (d,d+n,CompareName); if (w=="Year") sort(d,d+n,CompareYear); if (w=="Price") sort(d,d+n,ComparePrice); j++; if (j!=1) cout<<endl; for (i=0;i<n;i++) cout<<d[i].a<<" "<<d[i].b<<" "<<d[i].c<<endl; } return 0; }
解题感受:
这道题本身不难啦,通过比较,排序就可以排出顺序,将剩下的数组也依次排序就好了。最后注意输出就好啦。