编程要求
在一个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;
}