我将制作一个功能,开始拍摄两部电影的时间:hr1,hr2,min1,min2
及其持续时间durmin1,durmin2
,并决定是否可以狂欢并观看两部电影。
标准是它们不能重叠,并且我们不会在一个结束和下一个结束之间等待超过30分钟。如果满足条件则返回true,否则返回false。电影开始时间总是在下午1点之后和午夜之前。第一个总是提前开始。输入参数的顺序为:hr1, min1, durmin1, hr2, min2, durmin2
我无法理解我的功能会做什么。这些时间是什么hr1,hr2
?为什么要给出持续时间?
我试过这个:
function mymovies=movies(hr1,min1,dur1,hr2,min2)
h1=hr1+min/60+dur1;
h2=hr2+min/60;
if h2-h1>=30/60 && h2-h1~=0
disp('Ture')
else
disp('False')
end
end
答案 0 :(得分:1)
首先:转换从第一部电影开始到结束为止的总时间
第二:将电影2的总开始时间转换为分钟
最后,只需使用差异来满足simpe if语句中的指令中给出的条件。和你的评分员一起尝试,然后告诉我当时会发生什么。 (最好是movie2 - movie1),因为你可以自由地假设movie1将始终首先开始) 鉴于你的水平,这应该足够了。
答案 1 :(得分:0)
-step 1:将hr,min转换为仅几分钟(如果你想要的话,过去下午1点......) 这样:
start_movie_1 = hr1*60 + min1
end_movie_1 = start_movie_1 + durmin1
类似于电影2。
-step 2:发现它们是否重叠。
if start_movie_1 < start_movie_2 and end_movie_1 > end_movie_2 => there is overlapping (whole movie 2 is inside movie 1)
if start_movie_1 < start_movie_2 and end_movie_1 > start_movie_2 => there is overlapping (movie 2 will start before movie 1 finish)
if start_movie_2 < start_movie_1 and end_movie_2 > end_movie_1 => there is overlapping (whole movie 1 is inside movie 2)
if start_movie_2 < start_movie_1 and end_movie_2 > start_movie_1 => there is overlapping (movie 1 will start before movie 2 finish)
-step 3:现在我们知道它们没有重叠,所以我们需要检查中间的时间
if start_movie_1 < start_movie_2 => return (start_movie_2 - end_movie_1) <= 30
else (start_movie_2 < start_movie_1)
return (start_movie_1 - end_movie_2) <= 30
编辑更简单答案
function mymovies=movies(hr1,min1,dur1,hr2,min2,dur2)
start_movie_1 = hr1*60 + min1;
end_movie_1 = start_movie_1 + dur1;
start_movie_2 = hr2*60 + min2;
end_movie_2 = start_movie_2 + dur2;
if start_movie_1 < start_movie_2 && end_movie_1 > end_movie_2
disp('FALSE');
else if start_movie_1 < start_movie_2 && end_movie_1 > start_movie_2
disp('FALSE');
else if start_movie_2 < start_movie_1 && end_movie_2 > end_movie_1
disp('FALSE');
else if start_movie_2 < start_movie_1 && end_movie_2 > start_movie_1
disp('FALSE');
else
if start_movie_1 < start_movie_2 && (start_movie_2 - end_movie_1) <= 30
disp('TRUE');
else if (start_movie_2 < start_movie_1) && (start_movie_1 - end_movie_2) <= 30
disp('TRUE');
else
disp('FALSE');
end
end
end