我将创建一个函数,该函数取两部电影的开始时间: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
好吧,只要有适当的变量和一点思考,一个if就足以解决这个问题。据我所知,你绝对不需要考虑第二部电影的时长。你只需要担心第一部电影的细节和第二部电影的开始时间。您还需要"返回"布尔结果,而不是显示它。因此,根据问题中的说明,你应该这样做:
First:将影片开始到结束的总时间转换为分钟
秒:将电影的总开始时间转换为分钟
最后,只需使用差值来满足简单if语句中指令中给出的条件。跟你的评分员试试,然后告诉我结果。(最好是movie2 - movie1),因为您可以自由地假设movie1总是先开始)考虑到你的水平,这应该足够了。
-步骤1:将hr, min转换为分钟(如果您想要…)所以:
start_movie_1 = hr1*60 + min1
end_movie_1 = start_movie_1 + durmin1
电影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)
-第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