编程要求
在一个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
这个真的没有头绪,希望能看看大家的思路

程序设计部分 结构体求解
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 快乐鹦鹉 2022-06-29 17:14关注
#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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录