结构体–值日安排

时间: 1ms        内存:128M

描述:

新生报到,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名同学的学号,姓名,出生年月日(任意两个学生出生日期不同)

输出:

安排好的一周的值日表,每行中的数据以空格隔开。

示例输入:

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

示例输出:

Monday 6125 lijianian
Tuesday 1147 chenjueyu
Wednesday 1224 lushaoxiao
Thursday 3132 wangxu
Friday 3128 mengyuan
Saturday 3129 yushisheng
Sunday 3220 zhangliying

提示:

参考答案(内存最优[1092]):


#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++)    //对组合进行排序,选择排序算法
    {
        tmp1 =  stu[i].year * 10000 + stu[i].month * 100 + stu[i].day;
        k=i;
        for( j = i+1 ; j < 7 ; j++)
        {
            tmp2 =  stu[j].year * 10000 + stu[j].month * 100 + stu[j].day;
            if( tmp2 > tmp1 )
            {
                k= j;
                tmp1 = tmp2;
            }
        }
        if(k!=i)
        {
            tmpstu=stu[i];
            stu[i]=stu[k];
            stu[k]=tmpstu;
        }
    }
    for( i = 0 ; i < 7 ; i++)   //输出排好序的stu信息
        printf("%s %d %s\n",days[i],stu[i].num,stu[i].name);
    return 0;
}

参考答案(时间最优[0]):


#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++)    //对组合进行排序,选择排序算法
    {
        tmp1 =  stu[i].year * 10000 + stu[i].month * 100 + stu[i].day;
        k=i;
        for( j = i+1 ; j < 7 ; j++)
        {
            tmp2 =  stu[j].year * 10000 + stu[j].month * 100 + stu[j].day;
            if( tmp2 > tmp1 )
            {
                k= j;
                tmp1 = tmp2;
            }
        }
        if(k!=i)
        {
            tmpstu=stu[i];
            stu[i]=stu[k];
            stu[k]=tmpstu;
        }
    }

    for( i = 0 ; i < 7 ; i++)   //输出排好序的stu信息
        printf("%s %d %s\n",days[i],stu[i].num,stu[i].name);
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。