题目描述

天佑非常喜欢点外卖,有一次他突发奇想能不能设计一个程序来帮自己点外卖。输入商家的总数n,接下来输入n组数据,其中包括序号(规定从1到n),外卖评分,钱数,配送时间。由于天佑比较在乎评分和钱数,且优先考虑评分。规定:当外卖评分大于4.7时,优先考虑钱数,钱少的排在前。当外卖评分小于4.7,优先考虑评分。当评分和钱数都相等时,优先考虑配送时间少的。当两个外卖一个大于4.7,一个小于4.7,选择大于4.7的。

输入

商家的总数n,n组数据,其中包括序号(规定从一到n),外卖评分,钱数,配送时间。

输出

选择的商家序号

样例输入

4
1 4.8 20 30
2 4.6 17 40
3 4.9 15 30
4 4.5 21 50

样例输出

3

题解

依然是水题一发,自认为是一道结构体、自定义排序考察题。语句解释及细节内附程序注释。

#include<bits/stdc++.h>
using namespace std;
struct mixue
{
    int bh,mo,ti;//序号,钱数,配送时间
    double sc;//评分
}a[10001];
bool cmp(mixue p,mixue q)
{
    if(p.sc>=4.7&&q.sc>=4.7&&p.mo!=q.mo)return p.mo<q.mo;//当外卖评分大于4.7时,优先考虑钱数,钱少的排在前
    if(p.sc<4.7&&q.sc<4.7&&p.sc!=q.sc)return p.sc>q.sc;//当外卖评分小于4.7,优先考虑评分
    if((p.sc>=4.7&&q.sc<4.7)||(p.sc<4.7&&q.sc>=4.7))return p.sc>q.sc;//当两个外卖一个大于4.7,一个小于4.7,选择大于4.7的
    return p.ti<q.ti;//当评分和钱数都相等时,优先考虑配送时间少的
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].bh>>a[i].sc>>a[i].mo>>a[i].ti;//输入序号,外卖评分,钱数,配送时间
    }
    sort(a+1,a+n+1,cmp);//依照cmp函数的排序规则进行排序
    cout<<a[1].bh;//输出选择的商家序号
}
最后修改:2021 年 08 月 16 日 03 : 25 PM
如果觉得我的文章对你有用,请随意赞赏