比较两部电影的时长



我将创建一个函数,该函数取两部电影的开始时间: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

最新更新