如何判断两段连续的数值没有重叠?

rroamer 2008-12-05 01:07:17
比如如下一个函数:

bool func(int minimumValue1, int maximumValue1, int minimumValue2, int maxmumValue2)
{

}


1:
func(2,5, 3,6);
返回 true, 有数值重叠

2: func(2, 8, 9, 20);
返回 false,无重叠

3: func(5, 10, 2,5);
返回true,有重叠

4: func(6, 8, 1, 7);
返回 true,有重叠


我自己写了一个,就是简单的把各种情况进行比较,觉得代码太啰嗦了,各位有没有简洁一点的代码?
...全文
113 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rroamer 2008-12-05
最后那几句有点错误,应该是:



if (maximumValue2==maximumValue1 || maximumValue2==minimumValue1)
{
return false;
}

if (minimumValue2==maximumValue1 || minimumValue2==minimumValue1)
{
return false;
}



回复
rroamer 2008-12-05

bool func(int minimumValue1, int maximumValue1, int minimumValue2, int maximumValue2)
{
if (minimumValue1<=0 || minimumValue1>=65535)
{
return false;
}

if (minimumValue2<=0 || minimumValue2>=65535)
{
return false;
}




if (maximumValue2>minimumValue1 && maximumValue2<maximumValue1)
{
return false;
}

if (minimumValue2>minimumValue1 && minimumValue2<maximumValue1)
{
return false;
}


if (maximumValue1>minimumValue2 && maximumValue1<maximumValue2)
{
return false;
}

if (minimumValue1>minimumValue2 && minimumValue1<maximumValue2)
{
return false;
}



if (maximumValue2==maximumValue1 || maximumValue2==maximumValue1)
{
return false;
}

if (minimumValue2==maximumValue1 || minimumValue2==maximumValue1)
{
return false;
}



return true;

}
回复
wiowei 2008-12-05
不复杂啊
bool func(int min1, int max1, int min2, int max2)
{
if(min1 > max2 || min2 > max1)
return false;
else
return true;
}
回复
jiww03 2008-12-05
如果前面的两个数中的一个在后面两个数之间或后面两个数中的一个在前面两个数之间,true,否则,false
回复
DarknessTM 2008-12-05
LS的,搞个 bResult 出来根本没啥用处么…… 直接return 不容易出问题
回复
wh0588 2008-12-05
随便写了,不知道你嫌不嫌啰嗦
bool func(int minmumValue1, int maxmumValue1, int minmumValue2, int maxmumValue2)
{
if (minmumValue1 > maxmumValue1 || minmumValue2 > maxmumValue2)
{
return false;
}

bool bResult = false;
if (minmumValue1 == minmumValue2)
{
bResult = true;
}
else if (minmumValue1 < minmumValue2)
{
if (maxmumValue1 >= minmumValue2)
{
bResult = true;
}
}
else
{
if (maxmumValue2 >= minmumValue1)
{
bResult = true;
}
}
return bResult;
}
回复
ASSERT(min1 <= max1 && min2 <= max2); 
return (min1 <= max2) && (max1 >= min2);
回复
Tinary3v0 2008-12-05
[Quote=引用 1 楼 windyloft 的回复:]
最简单的也是最高效的。
[/Quote]
我觉得也是 如果用别的方法不见得就比用判断运算量少,虽然代码看起来或者写起来有点麻烦 但是应该是最好的方法了。
回复
cnzdgs 2008-12-05
return minimumValue1 <= maxmumValue2 && maximumValue1 >= minimumValue2;
回复
(min1 <= min2) && (max1 >= min2)
||
(min1 >= min2) && (min1 <= max2)
回复
灰灰2006 2008-12-05
比较边值就可以了

bool func(int minimumValue1, int maximumValue1, int minimumValue2, int maxmumValue2)
{
ASSERT(minimumValue1 <= maximumValue1 && minimumValue2 <= maxmumValue2);
if (maximumValue1 >= minimumValue2 && minimumValue1 >= maxmumValue2)
return true
return false;
}
回复
DarknessTM 2008-12-05
4个判断啊
回复
windyloft 2008-12-05
最简单的也是最高效的。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-12-05 01:07
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……