算法习题---4-8特别困的学生(UVa12108)
2024-09-30 05:18:54
一:题目
课堂上有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);
}
最新文章
- ScrollTo:平滑滚动到页面指定位置
- RabbitMQ学习: 介绍
- virtualenv 安装
- Maximum Product Subarray JAVA实现
- CGContextRef CIImageRef详解
- jQuery验证插件
- Hibernate介绍和入门案例
- 手游 ui布局
- 人工智能背景下的Office 365现状和发展趋势
- vue 中的通过搜索框进行数据过滤的过程
- 基于335X平台的UBOOT中交换芯片驱动移植
- 关于js-xlsx的简单使用
- spring-framework-x.x.x.RELEASE-dist下载教程
- 手工生成AWR报告方法记录
- 【java多线程】队列系统之LinkedBlockingQueue源码
- vue-cli引入mui的步骤
- Spring注入方式(2)
- java7(2)——使用mutilcatch注意事项
- Mysql之正则匹配
- Many-to-many relationships in EF Core 2.0 – Part 3: Hiding as ICollection