我在PHP的小项目中遇到问题,并且无法考虑考虑每种情况的算法。该问题为文件提供了两个常量和一个信息数组。
<?php
// The start and end of nighttime hours
$SETTINGS_nighttime_start = '22:00';
$SETTINGS_nighttime_end = '07:00';
// Employees and their shifts
$EMPLOYEES = array(
'0' => array(
'name' => 'Bernice Lyons',
'shift_start' => '15:15',
'shift_end' => '23:45'
),
'1' => array(
'name' => 'Gregg Santos',
'shift_start' => '10:00',
'shift_end' => '22:00'
),
'2' => array(
'name' => 'Bennie Montgomery',
'shift_start' => '22:30',
'shift_end' => '08:00'
),
'3' => array(
'name' => 'Nelson Austin',
'shift_start' => '20:00',
'shift_end' => '10:00'
),
'4' => array(
'name' => 'Garrett Sims',
'shift_start' => '09:00',
'shift_end' => '17:00'
),
'5' => array(
'name' => 'Joanna Pratt',
'shift_start' => '23:00',
'shift_end' => '06:00'
)
);
&GT;
因此,我需要编写一个算法来考虑每个案例,并计算某人每天工作和晚上工作的时间。
我应该用什么声明来报道案件并获得正确的结果:
startShift = 20:00
endShift = 10:00
应该结果
daytimeWork = 05:00
nighttimeWork = 09:00
我到目前为止得到了数据并在屏幕上打印,但我在计算白天和夜间班次时遇到问题
我写的这个案例的伪代码是
if(startShift<22:00 && endShift>07:00){
nighttimeWork = 09:00;
daytimeWork = shiftLength - 09:00;
}
但声明中包含案例
startShift = 10:00
endShift = 20:00
我很沮丧。请有人帮忙。
答案 0 :(得分:2)
此问题要求您从班次开始:时间间隔由开始/结束时间表示。它要求你将这些转变分解为shiftlets:较小的非重叠时间间隔,其结合跨越相同的开始/结束时间。
考虑一个软件操作,它将一个移位项目作为输入,并将其分解为shiftlets。
例如:
startShift = 20:00 endShift = 10:00
首先打破这种转变为不会跨越午夜的小穗:
startShift = 20:00 endShift = 00:00
startShift = 00:00 endShift = 10:00
然后将这些叛徒分成不穿越白天/黑夜边界的小手。
startShift = 20:00 endShift = 00:00
startShift = 00:00 endShift = 07:00
startShift = 07:00 endShift = 10:00
然后在白天或晚上对每个小琵琶进行分类,然后加起来,你就完成了。
答案 1 :(得分:0)
所以我结束了编写一个不知道是否有效的算法,但认为它适用于表格的给定时间和其他所有情况
if(startTime <22:00 && endTime>=07:00{
if(startTime > endTime){
nightShift = 09:00; //From 22:00 - 07:00
dayShift = shiftLength - 09:00 //What left is daytime
}
else if(startTime < endTime){
if(endTime >22:00){//if endTime is for example 23:00
nightTime = endTime - 22:00;
dayTime = shiftLength - nightTime;
else{
if(startTime<07:00){
nightTime = 07:00 - startTime;
dayTime = shiftLength - nightTime;
}
else{
dayTime = shiftLength; //all hours should be day
nightTime = 0;
}
}
}
elseif(startTime>=22:00){
if(endTime>07:00){
nightTime = 24 - (startTime - 07:00); //from start time i.e 23:00 to 06:00
dayTime = shiftLength - nightTime;
if(endTime<=07:00){
nightTime = shiftLength; //worked all night
dayTime = 0;
}
//This elseif not need for the given values but covers the case i.e from 17:00 to 03:00
//and start after 00:00 and ending before 07:00
elseif(startTime<22:00 && endTime<=07:00){
if(startTime<07:00){
nightShift = shiftLength;
dayShift = 0;
}
else{
dayTime = 22:00 - startTime;
nightTime = shiftLength - dayTime;
}
}