题目描述
LZY由于在“饱了么”工作的不错,由其是上次在大家的帮助下完成了餐厅筛选系统,深得顶头上司WLJ的赏识。WLJ今天交给他一个新的任务,并且许诺LZY完成后给他升职加薪。为了降低LZY的工作量,WLJ只要求他筛选一天之内的订单即可。LZY于是又来求助你们了。WLJ这次给他的任务是,完成一个订单查询系统。一个订单由订单编号、订单名称、订单完成时间、用户满意度组成,LZY的任务是根据不同的筛选条件,筛选出符合要求的订单列表。
其实就是道快排题目
输入
测试样例由多组测试数据组成。每组测试数据第一行输入一个正整数 n ( 1 <= n <= 500 ),代表订单总数,接下来n行输入 3个字符串 a ,b ,c ( 1 <= a.length , b.length <= 20) ( c.length == 8 )和一个整数 d ( 0 <= d <= 5 )分别代表订单编号、订单名称、订单完成时间、用户满意度。
其中订单完成时间为固定格式 hh:mm:ss
最后一行输入两个字符串 q, w ,分别代表符合要求的订单的 最晚订单完成时间 以及 最低用户满意度,超出最晚订单完成时间以及低于最低用户满意度的订单不应该被筛选。
如果q和w任意一项为all,代表该项筛选没有限制。如果q和w均为 all,则输出所有订单信息。 筛选完成后按照 订单时间从小到大排序,如果时间一致,则按用户满意度从大到小排列,如果用户满意度一致,则按照订单编号从小到大排列。
输出
输出符合条件的订单信息,每条信息用换行符分隔。
样例输入 Copy
3
tmhymusgykzuynaxht zgdmpzqbuh 10:39:10 5
icfffbfoqekdrfjifx unwzrjcevc 02:15:17 2
ejdjjuooprfazylyrp bviuaftdfp 17:34:56 0
all 0
样例输出 Copy
icfffbfoqekdrfjifx unwzrjcevc 02:15:17 2
tmhymusgykzuynaxht zgdmpzqbuh 10:39:10 5
ejdjjuooprfazylyrp bviuaftdfp 17:34:56 0
思路:
仔细仔细。
char不熟练就用string 。strcmp();比 < , > , = 还香吗???
AC代码:
#include<bits/stdc++.h>
using namespace std;
struct ma{
string a,b,c,d;
}s[505],s1[505];
string q,w;
int n,m;
int cmp1(ma x,ma y){
if(x.c==y.c){
if(x.d==y.d){
return x.a<y.a;
}else{
return x.d>y.d;
}
}else{
return x.c<y.c;
}
}
int main(){
while(cin>>n){
for(int i=0;i<n;i++){
cin>>s[i].a>>s[i].b>>s[i].c>>s[i].d;
}
cin>>q>>w;
sort(s,s+n,cmp1);
if(q=="all"&&w=="all"){
for(int i=0;i<n;i++){
cout<<s[i].a<<" "<<s[i].b<<" "<<s[i].c<<" "<<s[i].d<<endl;
}
}else if(q=="all" &&w!="all"){
for(int i=0;i<n;i++){
if(w<=s[i].d){
cout<<s[i].a<<" "<<s[i].b<<" "<<s[i].c<<" "<<s[i].d<<endl;
}
}
}else if(q!="all" && w=="all"){
for(int i=0;i<n;i++){
if( q >= s[i].c ){
cout<<s[i].a<<" "<<s[i].b<<" "<<s[i].c<<" "<<s[i].d<<endl;
}
}
}else{
for(int i=0 ; i<n ; i++){
if( q >= s[i].c && w<=s[i].d){
cout<<s[i].a<<" "<<s[i].b<<" "<<s[i].c<<" "<<s[i].d<<endl;
}
}
}
}
return 0;
}