首页 > 电脑

麻烦帮我看下排序哪里有问题...谢谢啦

更新时间2018-08-19 22:05:12

#include<bits/stdc++.h>

using namespace std;

struct point{

string id;

int b;

}a[105];

bool cmp(point x,point y)

{

if(x.b<60&&y.b<60)

    return x.id>y.id;

if(x.b==y.b)

    return x.id>y.id;

if(x.b>=60&&y.b>=60)

    if(x.b==y.b)

        return x.id>y.id;

    else

        return x.id>y.id;

}

int main()

{

int n,i;

cin>>n;

for(i=0;i<n;i++)

{

cin>>a[i].id>>a[i].b;

}

sort(a,a+n,cmp);

for(i=0;i<n;i++)

{

cout<<a[i].id<<endl;

}

return 0; 

【题目描述】

病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

1.老年人(年龄 >= 60岁)比非老年人优先看病。

2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。

3.非老年人按登记的先后顺序看病。

 

【输入】

第1行,输入一个小于100的正整数,表示病人的个数;

后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。

 

【输出】

按排好的看病顺序输出病人的ID,每行一个。

【输入样例】

5
021075 40
004003 15
010158 67
021033 75
102012 30

【输出样例】

021033
010158
021075
004003
102012


你的排序比较有问题,以下是我写的

bool cmp(point x,point y)

{

//1.年龄 >= 60岁)比非老年人优先看病。

  if (x.b>=60 && y.b<60)

    return 1;

  if (x.b<60 && y.b>=60)

      return 0;

//老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。

  if (x.b>=60 && y.b>=60)

  {

      if (x.b==y.b)

       return x.id<y.id;

     return x.b>y.b;

  }

//3.非老年人按登记的先后顺序看病。

   return x.id<y.id;      

}

有个问题是你的例样输入/输出感觉不对啊

021075 40

 是非老人

它应该排在

004003 15

的后面啊


相关标签:谢谢

上一篇:在那里可以找到真实平台?

下一篇:自己搭建网站需要的网站源码资源