一:题目

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

(一)案例详解

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

(一)样例输入

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

(二)样例输出

Case :
Case : -

二:代码实现

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

获取学生信息

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

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

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

主函数

void main()
{
int n = ;
FILE* fp = freopen("data8.in", "r", stdin);
freopen("data8.out", "w", stdout); while (getStuInfo())
printf("Case %d: %d\n", n++, getRealStuTime()); freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}

算法习题---4-8特别困的学生(UVa12108)的更多相关文章

  1. 特别困的学生 UVa12108(模拟题)

    一.题目 课堂上有n个学生(n<=10).每个学生都有一个“睡眠-清醒”周期,其中第i个学生醒Ai分钟后睡Bi分钟,然后重复(1<=Ai,Bi<=5),初始第i个同学处于他的周期的C ...

  2. UVa 12108 特别困的学生

    https://vjudge.net/problem/UVA-12108 题意:给出n个学生的“清醒—睡眠”周期和初始时间点,每个学生在睡眠时需要判断全班睡觉人数是否严格大于清醒人数,否则在坚持一个清 ...

  3. 【算法习题】数组中任意2个(3个)数的和为sum的组合

    题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...

  4. 算法习题---5-4交换学生(UVa10763)

    一:题目 有一组学生,他们手中分别有自己学校和想要去的目标学校(A,B).为了成功的交换学生,必须保证这一组学生中必须每两个人之间满足 s1 (A,B) 和 s2 (B,A).即两者原来和目标学校相对 ...

  5. July 算法习题 - 字符串4(全排列和全组合)

    https://segmentfault.com/a/1190000002710424 思想:当前层各节点首元素不同,则各节点的剩余元素也不同:下一层节点交换范围为首元素以外的元素 全排列算法: vo ...

  6. 【算法笔记】B1038 统计同成绩学生

    1038 统计同成绩学生 (20 分) 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 10​5​​ 的正整数 N,即学生总人数.随后一行给 ...

  7. 算法习题---4-9数据挖掘(Uva1591)

    一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...

  8. tarjan算法 习题

    dfs树与tarjan算法 标签(空格分隔): 517coding problem solution dfs树 tarjan Task 1 给出一幅无向图\(G\),在其中给出一个dfs树\(T\), ...

  9. 【算法习题】正整数数组中和为sum的任意个数的组合数

    1.递归实现(参考:https://blog.csdn.net/hit_lk/article/details/53967627) public class Test { @org.junit.Test ...

随机推荐

  1. test20190526 Noip 模拟赛 4

    调整(tweak) [问题描述] 已给定一个 N个点 M条边的有向图,点编号为1到N,第i条边为 (ui,vi), 权值为 wi. 你可以进行一次操作,使得任意条边的权值变成非负整数.要求进行尽量少的 ...

  2. 测试工具( Burp Suite)介绍了解篇

    Mac 安装 Burp Suite破解版,参考链接: https://www.jianshu.com/p/3224c2308ffa 建议:目前官网的最新版为2.1.4.建议使用1.7.36版本,有破解 ...

  3. hbase实践之协处理器Coprocessor

    HBase客户端查询存在的问题 Scan 用Get/Scan查询数据, Filter 用Filter查询特定数据 以上情况只适合几千行数据以及不是很多的列的"小数据". 当表扩展为 ...

  4. 在linux系统中安装MySQL

    1.安装Linux系统中自带的MySQL安装包 在现在常用的发行版本里都集中了MySQL安装包 CentOS系统中的YUM中包含了MySQL安装包,版本是MySQL5,rpm软件包的名称是mysql- ...

  5. vue3 RFC初尝试

    由于vue3.x还没有正式发布,所以可以通过安装包vue-function-api提前尝试 npm install vue-function-api --save main.js import Vue ...

  6. ps -p {pid} -o etime获取进程运行时间是如何计算出来的?

    ps -p 986 -o etime可以获取进程986的执行时间,不论系统时间有没有发生改变,它都可以返回正确的结果: -bash-4.2$ ps -p 986 -o etime ELAPSED 13 ...

  7. 结构化异常SEH处理机制详细介绍(二)

    本文将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型.SEH实际包含两个主要功能:结束处理(termin ...

  8. C利用可变参数列表统计一组数的平均值,利用函数形式参数栈原理实现指针运算

    //描述:利用可变参数列表统计一组数的平均值 #include <stdarg.h> #include <stdio.h> float average(int num, ... ...

  9. CLion201914 下载安装

    链接:https://pan.baidu.com/s/12Gzo8gL3iUFoL5wok6L_BQ  密码:7vw4 56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRM ...

  10. 下载svn

    http://subversion.apache.org/download.cgi?update=201708081800 Windows下载zip,其他系统的下载tar.gz