问题 C: 饱了吗

题目描述LZY经过大学三年的刻苦学习,在大三毕业前夕,终于入职外卖行业巨头——饱了吗?作为饱了吗的新晋JAVA工程师,项目经理分配了一个艰巨的任务给他,希望他完成一个餐厅过滤器.现在给LZY一个餐馆信息列表,每个餐馆的信息包括id,rating,veganFriendly,price,distance,分别代表餐馆id,餐馆评分,餐馆是否对素食者友好,平均价格以及距离。

过滤规则如下:
其中素食者友好过滤器 veganFriendly 的值可以为 true 或者 false,如果为 true 就意味着你应该只留下包括 veganFriendly 为 true 的餐馆,为 false 则意味着可以包括任何餐馆。此外,我们还有最大价格 maxPrice 和最大距离 maxDistance 两个过滤器,它们分别考虑餐厅的价格因素和距离因素的最大值。

过滤后输出符合要求的餐馆信息,按照 rating 从高到低排序。如果 rating 相同,那么按 id 从高到低排序。简单起见, veganFriendly 为 true 时取值为 1,为 false 时,取值为 0 。
输入测试数据由多组测试样例组成。
每组测试数据第一行输入4个整数,餐馆的数量 n ( 1 <= n <= 10000 ), 素食友好标记 a ( a == 0 or a == 1 ),最大价格 b ( 0 <= b <= 10000 ), 最远距离c ( 0 <= c <= 10000 )
接下来n行分别输入5个整数 餐馆id q( 1 <= q <= 10000 ),餐馆评分 w ( 1 <= w <= 10000 ) ,餐馆是否对素食者友好 ( e == 0 or e == 1 ),餐馆平均价格 r ( 1 <= r <= 10000 )以及餐馆距离(1 <= g <= 10000 )

输出输出经过筛选后的餐馆清单,每行输出一条餐馆信息。样例输入 Copy5 0 50 10
1 4 1 40 10
2 8 0 50 5
3 8 1 30 4
4 10 0 10 3
5 1 1 15 1
样例输出 Copy4 10 0 10 3
3 8 1 30 4
2 8 0 50 5
1 4 1 40 10
5 1 1 15 1
提示由于测试样例数据过大,建议使用scanf和printf进行输入和输出
结构体排序
1.错误代码

#include<bits/stdc++.h>
using namespace std;
struct node{
 int q,w,e,r,g;
}f[11000];
bool cmp(node x,node y){
 if(x.w !=y.w ) return x.w >y.w ;
 return x.q >y.q ;
}
int main(){
 int n,a,b,c;
 int sum;
 while(cin>>n>>a>>b>>c){
  for(int i=0;i<n;i++){
   cin>>f[i].q >>f[i].w >>f[i].e >>f[i].r >>f[i].g ;
   if(f[i].e ==1){
    sum++; 
   }
  }
  sort(f,f+n,cmp);
  for(int i=0;i<n;i++){
   if(a==0){
    if(f[i].r <=b&&f[i].g <=c){
     cout<<f[i].q <<f[i].w <<f[i].e <<f[i].r <<f[i].g <<endl;
    }
   }
   else if(a==1){
    if(f[i].e ==1&&f[i].r <=b&&f[i].g <=c){
     cout<<f[i].q <<f[i].w <<f[i].e <<f[i].r <<f[i].g <<endl; 
    }
   }
  }
 }
 return 0;
}

输出格式错误
2.正确代码

#include<bits/stdc++.h>
using namespace std;
struct node{    
int q,w,e,r,g;
}f[11000];
bool cmp(node x,node y){    
if(x.w !=y.w ) return x.w >y.w ;    
return x.q >y.q ;}
int main(){    
int n,a,b,c;    
int sum=0;    
while(cin>>n>>a>>b>>c){        
for(int i=0;i<n;i++){            
cin>>f[i].q >>f[i].w >>f[i].e >>f[i].r >>f[i].g ;            
if(f[i].e ==1){                
sum++;              
}        
}        
sort(f,f+n,cmp);        
for(int i=0;i<n;i++){            
if(a==0){                
if(f[i].r <=b&&f[i].g <=c){                    
cout<<f[i].q <<" "<<f[i].w<<" "<<f[i].e<<" "<<f[i].r <<" "<<f[i].g <<endl;                }            
}            
else if(a==1){                
if(f[i].e ==1&&f[i].r <=b&&f[i].g <=c){                    
cout<<f[i].q <<" "<<f[i].w<<" "<<f[i].e<<" "<<f[i].r <<" "<<f[i].g <<endl;                  }            
}        
}    
}    
return 0;
}
发布了12 篇原创文章 · 获赞 0 · 访问量 122

猜你喜欢

转载自blog.csdn.net/weixin_45987032/article/details/104524737