6 条题解

  • 4
    @ 2023-7-26 13:08:19

    解析

    根据规则编写cmp:

    1. 于60岁的和小于60岁的,大于60先看病。
    2. 两者都大于60岁
      1. 年龄不同,年龄更高的先看病
      2. 年龄相同,id更小的先看病
    3. 两者都小于60岁,id更小的先看病

    题解

    #include <iostream>
    #include <algorithm>
    using namespace std;
    struct Peo
    {
        string ID; // ID
        int age;   // 年龄
        int logId; // 登记顺序
    };
    int n;
    Peo a[105];
    bool cmp(Peo x, Peo y)
    {
        if ((x.age >= 60) != (y.age >= 60))
            return (x.age >= 60) && (y.age <= 60);
        if (x.age >= 60)
        {
            if (x.age != y.age)
                return x.age > y.age;
            else
                return x.logId < y.logId;
        }
        return x.logId < y.logId;
    }
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i].ID >> a[i].age;
            a[i].logId = i;
        }
        sort(a + 1, a + n + 1, cmp);
        for (int i = 1; i <= n; i++)
            cout << a[i].ID << endl;
        return 0;
    }
    
    
    
    • 1
      @ 2023-7-27 16:53:18

      yasuo👀️

      #include <iostream>
      #include <algorithm>
      struct sick{
          std::string id;int age,order;
      }a[105];
      bool yasuo(sick x,sick y){
          if((x.age>=60)!=(y.age>=60)) return (x.age>=60)&&(y.age<=60);
          if(x.age!=y.age&&x.age>=60) return x.age>y.age;
          return x.order<y.order;}
      int main(){
          int n;std::cin>>n;
          for(int i=0;i<n;i++){
              std::cin>>a[i].id>>a[i].age;a[i].order=i;}
          std::sort(a,a+n,yasuo);
          for(int i=0;i<n;i++) std::cout<<a[i].id<<"\n";
          return 0;}
      
      • 0
        @ 2023-8-7 14:52:43
        #include<bits/stdc++.h>
        using namespace std;
        struct puiple
        {
            int age, logid;
            string id;
        }a[105];
        bool cmp(puiple a, puiple b)
        {
            if(a.age >= 60 && b.age >= 60)
            {
                if(a.age == b.age)
                    return a.logid < b.logid;
                else
                    return a.age > b.age;
            }
            else if((a.age < 60 && b.age >= 60)||(a.age >= 60 && b.age < 60))
                return a.age > b.age;
            else
                return a.logid < b.logid;
        }
        int main()
        {
            int n;
            cin >> n;
            for(int i = 1; i <= n; i++) 
            {
                cin >> a[i].id >> a[i].age; 
                a[i].logid = i;
            }
            sort(a+1,a+1+n,cmp);
            for(int i = 1; i <= n; i++) cout << a[i].id << endl;
            return 0;
        }
        
        • 0
          @ 2023-8-6 8:29:55

          求助!!!

          我的想法是这样的,既然要按照输入顺序输出,那搞个稳定排序算法不就行了 但没AC 警告!!!此程序为三无产品,请谨慎食用

          #include <bits/stdc++.h>
          using namespace std;
          int n;
          struct patient{
              string ID;
              int age;
          }a[105];
          int main(){
              scanf("%d",&n);
              for(int i=1;i<=n;i++){
                  cin>>a[i].ID>>a[i].age;
              }
              for(int i=1;i<=n;i++)for(int j=1;j<n-i+1;j++)if(a[j].age<a[j+1].age)swap(a[j],a[j+1]);
              for(int i=1;i<=n;i++)cout<<a[i].ID<<endl;;
              return 0;
          }
          
          • 0
            @ 2023-7-26 21:56:30

            直接看注释吧

            #include <iostream>
            #include <algorithm>
            using namespace std;
            
            //因为会给多行数据,且每行有多个,所以考虑用结构体解题
            struct patient
            {
                int logID,age;
                string ID;
            };
            patient p[105];//因为有多个病人,所以创了个数组
            
            //后面要用到排序,也就是sort,所以先把cmp函数写好
            bool cmp(patient a,patient b)
            {
                if((a.age >= 60 && b.age < 60) || (a.age < 60 && b.age >= 60))
                //如果两个病人里有一个是非老年人(脑子不好使,所以写长了一点,能简化的话可以简化)
                    return (a.age > b.age);//年纪大的排前面
                else if(a.age >= 60 && b.age >= 60)//如果两个老年人
                {
                    if(a.age == b.age)//如果年纪一样
                        return (a.logID <b.logID);//先登记的排前面
                    else
                        return (a.age > b.age);//年龄大的排前面
                }
                else//两个非老年人
                    return (a.logID <b.logID);//先登记的排前面
            }
            
            int main()
            {
                int n;
                cin >> n;
                for(int i = 1;i <= n;i++)
                {
                    cin >> p[i].ID >> p[i].age;
                    p[i].logID = i;
                }
                sort(p + 1,p + n + 1,cmp);//排序
                for(int i = 1;i <= n;i++)
                    cout << p[i].ID << endl;//输出
                return 0;
            }
            
            • @ 2023-7-27 16:55:13

              说实话,你的cmp是真的太多👀️

              可以参考我滴bool yasuo😄

          • -10
            @ 2023-7-27 13:38:07

            #include <iostream> #include <bits/stdc++.h> using namespace std; struct Peo { string ID; int age,logId; }; int n; Peo s[105]; bool cmp(Peo x,Peo y) { if ((x.age >= 60) != (y.age >= 60)) return (x.age >= 60) && (y.age <= 60); if (x.age >= 60) { if (x.age != y.age) return x.age > y.age; else return x.logId < y.logId; } return x.logId < y.logId; } int main() { cin >> n; for (int i = 1;i <= n;i++) { cin >> s[i].ID >> s[i].age; s[i].logId = i; } sort(s + 1,s + n + 1,cmp); for (int i = 1;i <= n;i++) { cout << s[i].ID << " " << endl; } return 0; }

            • 1

            信息

            ID
            340
            时间
            1000ms
            内存
            128MiB
            难度
            6
            标签
            递交数
            1150
            已通过
            380
            上传者