题目描述
新生报到,OJ 实验室新来了 7?名同学,为了安排一周的宿舍值日情况,决定按照年龄从小到大的顺序依次安排到周一至周日。
请完善如下程序:
#include <stdio.h>
#include <stdlib.h>
struct studentInfo
{
int num; //学生学号
char name[20]; //学生姓名,默认不超过20个字符
int year; //学生出生年份
int month; //学生出生月份
int day; //学生出生天
};
int main()
{
int i,j,k,tmp1,tmp2; //i,j迭代变量
char *days[7] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
struct studentInfo stu[7],tmpstu; //学生信息
for( i = 0 ; i < 7 ; i++)
scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].year,&stu[i].month,&stu[i].day);
/*******在下面填写代码***********/
/*******在上面填写代码***********/
for( i = 0 ; i < 7 ; i++) //输出排好序的stu信息
printf("%s %d %s\n",days[i],stu[i].num,stu[i].name);
return 0;
}
输入
7名同学的学号,姓名,出生年月日(任意两个学生出生日期不同)
输出
安排好的一周的值日表,每行中的数据以空格隔开。
输入输出样例
样例输入 #1
1224 lushaoxiao 1997 12 24
3132 wangxu 1997 11 10
3128 mengyuan 1997 10 1
3129 yushisheng 1997 8 12
1147 chenjueyu 1998 3 24
6125 lijianian 1998 6 14
3220 zhangliying 1997 7 18
样例输出 #1
Monday 6125 lijianian
Tuesday 1147 chenjueyu
Wednesday 1224 lushaoxiao
Thursday 3132 wangxu
Friday 3128 mengyuan
Saturday 3129 yushisheng
Sunday 3220 zhangliying
参考解答:
for (i = 0; i < 6; i++)
{
for (j = 0; j < 6-i; j++)
{
if (stu[j].year < stu[j + 1].year)
{
tmpstu = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = tmpstu;
}
if (stu[j].year == stu[j + 1].year)
{
if (stu[j].month < stu[j + 1].month)
{
tmpstu = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = tmpstu;
}
if (stu[j].month == stu[j + 1].month)
{
if (stu[j].day < stu[j + 1].day)
{
tmpstu = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = tmpstu;
}
}
}
}
}
?
|