6 条题解
-
4
解析
根据规则编写cmp:
- 于60岁的和小于60岁的,大于60先看病。
- 两者都大于60岁
- 年龄不同,年龄更高的先看病
- 年龄相同,id更小的先看病
- 两者都小于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
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
#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
求助!!!
我的想法是这样的,既然要按照输入顺序输出,那搞个稳定排序算法不就行了 但没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
直接看注释吧
#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; }
-
-10
#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
- 上传者