有一根木头棍,有10000米长(总之是很长。)
我拿刷子沾墨汁,
第一次,把2米到4米处刷黑了。
第二次,把3米到7米处刷黑了。
第三次,把2米到8米处刷黑了。
第四次,把12米到15米处刷黑了。
好多好多次。
大家看出来了吧,每次只刷一小段,没有规律,有交叉关系,有包含关系,总之很乱。
如果把每刷一次作为一条记录存入数据库,可以求出一共刷了多少次,累积刷了多少米。
但是,如何知道这根木头棍一共有多少米被刷黑了呢?大家有什么简便高速的算法呢?
大家给个思想,或者能用VB(或VC或Delphi)给出代码就更好了。多谢多谢。

解决方案 »

  1.   

    添加两个字段,记录每次刷的起始、终止,
    再来写个select统计一下
      

  2.   

    用数组就行。
    a={0,0,0,0,0,0,0,.............}//木头棍的长度
    第一次,把2米到4米处刷黑了。
    a[1]=1,a[2]=1.a[3]=1
    第二次,把3米到7米处刷黑了。
    a[2]=1,a[3]=1,a[4]=1......
    最后统计就可了
      

  3.   

    var Wood: array[1..10000] of Integer; // fill with 0procedure Paint(Head, Tail: Integer);
    var I: Integer;
    begin
      for I := Head to Tail do Wood[I] := 1;// 涂黑部分记为1
    end;function LengthOfPainted: Integer; // 求出被涂黑总长
    var I: Integer;
    begin
      Result := 0;
      for I := 1 to 10000 do Result := Result + Wood[I];
    end;
      

  4.   

    就用westfly(西翔)的方法吧,
    如果想省空间,就用Byte。
    如果想再省,就用位操作啊。
    这样只要10000个bit,很省了吧,就是1250个byte。
      

  5.   

    请grail明示,我的数学不够好。简单介绍一些思想好么?“高速”与“省空间”不可得兼,舍“空间”而取“高速”者也。