判断一段数值和另一段数值完全不一样的方法? ( 积分: 20 )

  • 主题发起人 主题发起人 fengerzhang20
  • 开始时间 开始时间
F

fengerzhang20

Unregistered / Unconfirmed
GUEST, unregistred user!
例如给出一段数值是10-20
如果下段是1-9,或21-N则说明不在其内。
如果是1-10,11-20,20-N则说明有值在其内。
怎样才能判断出给的值完全不在已有值之内呢。
我现在的解决方法是一个一个的比较,不知有没有更方便的方法!问高手大哥们指点谢谢了
 
例如给出一段数值是10-20
如果下段是1-9,或21-N则说明不在其内。
如果是1-10,11-20,20-N则说明有值在其内。
怎样才能判断出给的值完全不在已有值之内呢。
我现在的解决方法是一个一个的比较,不知有没有更方便的方法!问高手大哥们指点谢谢了
 
先快速排序,有了顺序后就好办了。
用队头队尾和范围边界比较。
 
关键是已有的并不是只是一段的数据值呀,可以是1-10 15-20 50-60 30-45
呀排序后中间有好多空值也是可以的呀不能只判头和尾的呀
 
type
NumList1=10..20;//子界类型
NumList2=20..30;
end;
在将子界类型声明为集合类型
type
Nums1=set of NumList1;
Nums2=set of NumList2;
end;
事件中
var Num1:Nums1;
Num2:Nums2;
用'*'号取两集合的交集,好像还有include、exclude可以用,我的delphi坏了,所以没有源码。
 
所有的子界都不是固定的呀!怎么办呢
 
用边界值比较就可以了
function IsInRange(const aStandardMin, aStandardMax, aCompareMin,
aCompareMax: Integer): Boolean;
{ aStandardMin: 基准范围的低边界值
aStandardMax: 基准范围的高边界值
aCompareMin: 待比较范围的低边界值
aCompareMax: 待比较范围的高边界值
Result := true 范围有重合
Result := false 范围不重合
}
begin
Result := (aStandardMin <= aCompareMax) and (aStandardMax >= aCompareMin);
end;
 
就是用二分查找嘛。
 
后退
顶部