程序设计部分 结构体求解

编程要求
在一个100人的班级中,有同学生日相同的几率非常大。现在给出每个学生的学号生日,请你找出所有生日相同的学生。
右侧编辑器中有一个函数Count,请在此函数中读取数据统计结果。
输入数据由学员处理,每组数据有多行,第一行是一个整数n(0<=n<50),接下来有n条学生的信息。
每一条学生的信息都按照此格式给出:<学号> <生日月份> <生日日期>,其中学号是5位的字符串。
要求只输出生日相同的学生的学号,输出要求如下,具体效果参考测试说明或查看测试集:
对每组生日相同的学生,输出一行。
其中前两个数字表示月和日,后面跟着所有在当天出生的学生的学号,数字、学号之间都用一个空格分隔,简单起见,最后一个学号后面也有一个空格。
对所有的输出,要求按日期从前到后的顺序输出。
对生日相同的学号,按输入的顺序输出。
具体见测试说明。
测试说明
平台会对你编写的代码进行测试:
预期输入:
5
00001 1 10
00002 2 24
00003 1 10
00004 12 21
00005 12 21
预期输出:
1 10 00001 00003
12 21 00004 00005
这个真的没有头绪,希望能看看大家的思路

#include <stdio.h>
typedef struct _stuinfo
{
    char id[6];
    int year;
    int month;
}stuinfo;

typedef struct _birs
{
    int nums;
    int year;
    int month;
    char ids[50][6];
}birs;

int main ()
{
    stuinfo stu[50];
    int n,i,j,k=0;
    birs bir[50]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%s%d%d",stu[i].id,&stu[i].year,&stu[i].month);
    for(i=0;i<n;i++)
    {
        for(j=0;j<k;j++)
        {
            if(bir[j].year == stu[i].year && bir[j].month == stu[i].month)
                break;
        }
        if(j==k)
        {
            bir[k].month = stu[i].month;
            bir[k].year = stu[i].year;
            strcpy(bir[k].ids[0],stu[i].id);
            bir[k].nums = 1;
            k++;
        }
        else
        {
            strcpy(bir[j].ids[bir[j].nums],stu[i].id);
            bir[j].nums++;
        }
    }
    for(i=0;i<k;i++)
    {
        if(bir[i].nums > 1)
        {
            printf("%d %d ",bir[i].year,bir[i].month);
            for(j=0;j<bir[i].nums;j++)
                printf("%s ",bir[i].ids[j]);
            printf("\n");
        }
    }

    return 0;
}