Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 24小时范围交叉口逻辑_C_Algorithm - Fatal编程技术网

C 24小时范围交叉口逻辑

C 24小时范围交叉口逻辑,c,algorithm,C,Algorithm,我有从21:00到04:00的时间表。 大多数情况下,这些时间表可能会超过00:00点。 现在我还必须添加从00:00到23:59的正常日程安排。 我想计算相同的交叉点。 目前我正在使用 if(((mytime1.start_time <= mytime2.end_time) && (mytime2.start_time <= mytime1.end_time))). if(((mytime1.start_time按顺序考虑第一个时间间隔中的每个瞬间。如果这些瞬间都

我有从21:00到04:00的时间表。
大多数情况下,这些时间表可能会超过00:00点。
现在我还必须添加从00:00到23:59的正常日程安排。
我想计算相同的交叉点。
目前我正在使用

if(((mytime1.start_time <= mytime2.end_time) && (mytime2.start_time <= mytime1.end_time))).

if(((mytime1.start_time按顺序考虑第一个时间间隔中的每个瞬间。如果这些瞬间都不与第二个时间间隔的开始重合,则两个时间间隔不相交,除非时间间隔从开始就已经相交,在这种情况下,第一个时间间隔中的第一个瞬间将以类似的方式出现ng第二个区间。因此,如果第一个区间的起点和终点是(l1,r1),第二个区间的起点和终点是(l2,r2),我们可以通过查看l1是否包含在范围[l2,r2]中,以及l2是否包含在范围[l1,r1]中来检查。如果lx在数值上不大于rx,那么这是一个简单的检查,以查看是否(l1>=l2)和(l1=l1)||(l2按顺序考虑第一个时间间隔中的每个瞬间。如果这些瞬间都不与第二个时间间隔的开始重合,则两个时间间隔不相交,除非时间间隔从开始就已经相交,在这种情况下,第一个时间间隔中的第一个瞬间将发生在第二个时间间隔的类似过程中因此,如果第一个间隔的开始和结束是(l1,r1),第二个间隔的开始和结束是(l2,r2),我们可以通过查看l1是否包含在范围[l2,r2]中,以及l2是否包含在范围[l1,r1]中来检查。如果lx在数值上不大于rx,则这是查看例如(l1>=l2)和(l1=l1)|的简单检查(l2
bool dointervals重叠(int s0、int e0、int s1、int e1)
{
返回s0-e0
booldointervalsoverlap(int s0、int e0、int s1、int e1)
{


返回s0-e0请提供一个示例,说明您希望对间隔执行什么操作。不应该有两个重叠的间隔,例如
两个间隔21:00到04:00和08:00到10:00
应显示为不相交,而
20:00到22:00或03:00到05:00
中的任何一个或甚至是完全重叠的时间表都应显示为冲突ict。简而言之,不应该有任何交叉范围。在比较之前,只需将24添加到
mytime2.开始时间
mytime1.结束时间
中,如果其中一个小于12。只要每个日程安排不超过24小时,这将起作用。@codeartister 11:00-01:00(包括中午)变为35:00-25:00,并且不作为中间时间进行测试第13:00-14:0011:00-01:00节变为11:00-25:00。只有
mytime1.end\u time
mytime2.start\u time
需要在比较之前进行修改,如果它们小于12。不要修改
mytime1.start\u time
mytime2.end\u time
。我希望您得到了逻辑。请提供一个您想要的示例o与时间间隔有关。不应该有两个重叠的时间间隔,例如
两个时间间隔21:00至04:00和08:00至10:00
应显示为不相交,而
20:00至22:00或03:00至05:00
中的任何时间间隔或甚至完全重叠的时间表都应显示冲突。简言之,不应该有任何相交范围。请注意在进行比较之前,只需将24添加到
mytime2.开始时间
mytime1.结束时间
,如果两者中的任何一个小于12.只要每个计划都不超过24小时,这将起作用。@codeartist 11:00-01:00(包括中午)变为35:00-25:00,并且不会在交叉口13:00-14:0011:00-01:00变为11:00-25:00时进行测试。仅限y<代码> MyTime1. EndoTimeTime/Cyto> MyTime2. StaskStime需要修改,如果小于12,不要修改<代码> MyTime1.StcTyTime< /Cudi>或<代码> MyTime2. EndoStime< /Cord>。希望代码获得C++逻辑。ODE >在C 1999和以后,当包含<代码> <代码>。我会检查它。测试它和告诉。你能不能更清楚地知道好逻辑。虽然它工作了,但我似乎没有得到它。@ DEV-NulLytotoDeVulePult:我用一个新的解释替换了前面的文本。<代码>布尔O/C++ >是C++类型。这个问题被标记为代码> C<代码>代码> @人类形态。ic:
bool
在C 1999和更高版本中,当包含
时。我会检查它。测试它并告诉你。你能更清楚一些好的逻辑吗。虽然它有效,但我似乎不明白。@dev-null\u to\u dev\u full:我用一个新的解释替换了前面的文本。
bool DoIntervalsOverlap(int s0, int e0, int s1, int e1)
{
    return s0 - e0 <= (unsigned int) s0 - e1 || s1 - e1 <= (unsigned int) s1 - e0;
}