生日相同(结构体)

描述
在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的学号,出生月日。试找出所有生日相同的学生。
输入
第一行为整数n,表示有n个学生,n<100。
此后每行包含一个字符串和两个整数,分别表示学生的学号(字符串长度小于10)和出生月(1<=m<=12)日(1<=d<=31)。
学号、月、日之间用一个空格分隔。
输出
对每组生日相同的学生,输出一行,
其中前两个数字表示月和日,后面跟着所有在当天出生的学生的学号,数字、学号之间都用一个空格分隔。
对所有的输出,要求按日期从前到后的顺序输出。
对生日相同的学号,按输入的顺序输出。
样例输入
5
00508192 3 2
00508153 4 5
00508172 3 2
00508023 4 5
00509122 4 5
样例输出
3 2 00508192 00508172
4 5 00508153 00508023 00509122

题目分析:
注意标记使用过的学生就行了
代码:

#include<iostream>
#include<algorithm>
using namespace std;
struct student{
  string hao;
  int yue;
  int ri,num=0;
  int xu;//记录每个学生的输入顺序
}ren[101];
bool cmp(student,student);
int flag=0;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>ren[i].hao>>ren[i].yue>>ren[i].ri;
        ren[i].xu=i;
    }
    sort(ren+1,ren+n+1,cmp);//利用sort算法函数排序
    for(int i=1;i<=n-1;i++)
    {
        flag=0;//控制换行的输出
        for(int j=i+1;j<=n;j++)
        {
            if(ren[i].yue==ren[j].yue&&ren[i].ri==ren[j].ri&&ren[i].num==0)
            {
                cout<<ren[i].yue<<" "<<ren[i].ri<<" "<<ren[i].hao<<" ";
                ren[i].num=1;//标价此数已被使用
                flag=1;
            }
            if(ren[i].yue==ren[j].yue&&ren[i].ri==ren[j].ri&&ren[j].num==0)
            {
                ren[j].num=1;
                cout<<ren[j].hao<<" ";
                flag=1;
            }
        }
        if(flag)
            cout<<endl;
    }
    return 0;
}
bool cmp(student a,student b)
{
    if(a.yue==b.yue)
    {
        if(a.ri==b.ri)
            return a.xu<b.xu;
        else return a.ri<b.ri;
    }
     else return a.yue<b.yue;

}
发布了15 篇原创文章 · 获赞 14 · 访问量 3050

猜你喜欢

转载自blog.csdn.net/amazingee/article/details/104088187