• 算法习题---4-8特别困的学生(UVa12108)


    一:题目

    课堂上有n个学生(n<=10),每个学生上课都会出现一个“清醒-睡眠”周期,其中第i个学生学习Ai分钟后睡眠Bi分钟,依次重复。其中在从清醒到睡眠时有一个条件:只有到全班睡眠人数大于清醒人数时,这个学生才敢睡觉。
    题目使用(A,B,C)来描述一个学生的信息,A是该学生的清醒时间,B是该学生的睡眠时间,C是该学生的初始状态值(即在初始时是这个周期的第几分钟)
    问经过多久,所有人都清醒,当然也可能不存在这个时间,就输出-1.

    (一)案例详解

    3       学生人数
    2 4 1    清醒2分钟 睡眠4分钟 初始状态是在周期第1分钟
    1 5 2    清醒1分钟 睡眠5分钟 初始状态是在周期第2分钟
    1 4 3    清醒1分钟 睡眠4分钟 初始状态是在周期第3分钟

    (一)样例输入

    3       学生人数
    2 4 1    清醒2分钟 睡眠4分钟 初始状态是在周期第1分钟
    1 5 2    清醒1分钟 睡眠5分钟 初始状态是在周期第2分钟
    1 4 3    清醒1分钟 睡眠4分钟 初始状态是在周期第3分钟
    3
    1 2 1
    1 2 2
    1 2 3
    0

    (二)样例输出

    Case 1: 18
    Case 2: -1

     二:代码实现

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    
    #define CLASSTIME 1000000    //设置课程时间最大
    
    int sNum;    //学生人数1-10
    int a[11], b[11], c[11];    //记录各个学生的初始信息

    获取学生信息

    int getStuInfo()
    {
        scanf("%d", &sNum);
        if (!sNum)
            return 0;
        getchar();
    
        for (int i = 1; i <= sNum; i++)
        {
            scanf("%d %d %d", &a[i], &b[i], &c[i]);
            getchar();
        }
    
        return 1;
    }

    获取全部学生清醒的时刻(真正开始上课的时间)

    int getRealStuTime()
    {
        int count;
        for (int i = 1; i < CLASSTIME;i++)
        {
            count = 0;
            for (int j = 1; j <= sNum; j++) //先获取睡觉人数
                if (c[j] > a[j])    //在睡觉
                    count++;
            if (count == 0)    //全部在学习
                return i;
            for (int j = 1; j <= sNum; j++)    //更新状态
            {
                if (c[j] == a[j] + b[j] || (c[j] == a[j] && count < sNum - count)) //一个周期 或者 如果睡觉人数少于学习人数,则不敢睡觉,开始重新学习
                    c[j] = 0;
                c[j]++;    //更新每个学生的状态
            }
        }
        return -1;
    }

    主函数

    void main()
    {
        int n = 1;
        FILE* fp = freopen("data8.in", "r", stdin);
        freopen("data8.out", "w", stdout);
    
        while (getStuInfo())
            printf("Case %d: %d
    ", n++, getRealStuTime());
    
        freopen("CON", "r", stdin);
        freopen("CON", "w", stdout);
    }
  • 相关阅读:
    ubuntu之路——day14 只用python的numpy在底层实现多层神经网络
    2019春 软件工程 助教总结
    ubuntu之路——day13 只用python的numpy在较为底层的阶段实现单隐含层神经网络
    ubuntu之路——day12.1 不用tf和torch 只用python的numpy在较为底层的阶段实现简单神经网络
    ubuntu之路——day11.7 end-to-end deep learning
    ubuntu之路——day11.6 多任务学习
    ubuntu之路——day11.5 迁移学习
    mysql 主从复制 (1)
    Windows下Nginx的启动、停止、重启等命令
    mysql-5.7.17-winx64压缩版的安装包下载和安装配置
  • 原文地址:https://www.cnblogs.com/ssyfj/p/11167003.html
Copyright © 2020-2023  润新知