比较两部电影的持续时间

时间:2015-05-23 11:26:04

标签: matlab function if-statement boolean

我将制作一个功能,开始拍摄两部电影的时间: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

2 个答案:

答案 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