集装箱的积载图的行号表示方法 一行有N个格子,N是奇数,则在中间的一个标识 00。 00坐边的是奇数,右边的是偶数
例如 03  01  00  02  04 每个数字下面都有个格子(格子这里画不出)
如果N是偶数 则 直接就是 03 01 02 04请教各位了 搞定后立马结分付:DELPHI 这么优秀的工具居然倒在BORLAND 手里 无语中

解决方案 »

  1.   

    procedure MergeOddStrings(Dest, Source: TStrings) ;
    var
      Idx : integer;
    begin
       for Idx := Pred(Source.Count) downto 0 do
           Dest.Add(Source[Idx]) ;
    end;procedure MergeEvenStrings(Dest, Source: TStrings) ;
    var
      Idx : integer;
    begin
       for Idx := 0 to Pred(Source.Count) do
           Dest.Add(Source[Idx]) ;
    end;procedure TForm1.Button3Click(Sender: TObject);
    const
        Num = 33;
    var
      str: TStrings;
      strOdd: TStrings;
      strEven: TStrings;
      Idx: Integer;
    begin
      str := TStringList.Create;
      strOdd := TStringList.Create;
      strEven := TStringList.Create;
      for Idx := 1 to Num do
      begin
        if Idx mod 2 = 0 then
          strEven.Add(Format('%.2d',[Idx]))
        else
          strOdd.Add(Format('%.2d',[Idx]));
      end;
      MergeOddStrings(str, strOdd);
      if Num mod 2 <> 0 then
        str.Add(Format('%.2d',[0]));
      MergeEvenStrings(str, strEven);
      Memo1.Lines := str;
    end;Num就是你的每行的数目
      

  2.   

    算法是这样的:
    1、把一行的数目分成奇数和偶数2个数组(strOdd, strEven),
    2、奇数数组按降序、偶数数组按升序合并到总的数组(str)
    3、在合并偶数数组之前判断总的数目是否为奇数,
       如果是则填加00到总数组的尾部,然后再合并偶数数组。
      

  3.   

    type
      TArray = array of integer;function Calc(N: integer): TArray;
    var
      i, m: integer;
      S: TArray;
    begin
      Setlength(S, N + 1);
      m := N div 2;
      if odd(N) then
        S[m + 1] := 0;
      for i := 1 to N do
      begin
        if odd(i) then
          S[m - (i - 1) div 2] := i
        else
          S[m + i div 2 + 1] := i;
      end;
      Result := S;
    end;
      

  4.   

    调用:
    procedure TForm1.Button2Click(Sender: TObject);
    var
      t: TArray;
      i : integer;
    begin
      t := Calc(11);      //这里填你的数目
      Memo1.Clear;
      for i := 1 to length(t) - 1 do
      begin
        Memo1.Lines.Append(Format('%.2d',[t[i]]));
      end;
    end;
      

  5.   

    改了一下:
    type
      TArray = array of integer;function Calc(N: integer): TArray;
    var
      i, m: integer;
      S: TArray;
    begin
      Setlength(S, N + 1);
      m := N div 2;
      if odd(N) then
        S[m + 1] := 0;
      for i := 1 to N do
      begin
        if odd(i) then
          S[m - (i - 1) div 2] := i
        else
          if odd(N) then
            S[m + i div 2 + 1] := i
          else
            S[m + i div 2] := i;
      end;
      Result := S;
    end;算法是这样的:
    eg: 03  01  00  02  04 
        一数组t,算出上面数值在数组中的相应位置。
        即:
        03 => 1  t[1]=03
        01 => 2  t[2]=01
        00 => 3  t[3]=00
        02 => 4  t[4]=02
        04 => 5  t[5]=04