九宮格數值分組_九宮格

來源:互聯網
上載者:User

解答網友問題, 記錄如下:

未經處理資料

11,3811,3611,3711,3911,4012,3412,3512,3612,3712,3812,4013,3313,3413,3513,3613,4014,3214,3314,3414,3514,4015,3115,3215,3315,3415,4016,3016,3116,3216,3917,291,12,02,12,32,43,1


處理代碼

unit Unit15;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, rtlconsts;type  TForm15 = class(TForm)    btn1: TButton;    mmo1: TMemo;    procedure btn1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form15: TForm15;implementationtype  TCustomGroup = class  private    type    TRes = record      X, Y, Sum : integer;    end;    PRes = ^TRes;  private    FArr : array of TRes;    FFileName : string;    FCount : integer;    procedure Fill;    procedure FillRes(const Value : string; ARes : PRes);    procedure Sort;    procedure Output(ALst : TStrings);  public    constructor Create(const AFileName : string);    function Exec(ALst : TStrings) : Boolean;  end;{$R *.dfm}procedure TForm15.btn1Click(Sender: TObject);begin  mmo1.Clear;  with TCustomGroup.Create('c:\test.txt') do  try    if Exec(mmo1.Lines) then    begin      mmo1.SelStart := 0;      mmo1.SelLength := 0;      ShowMessage('Ok')    end    else      ShowMessage('Error');  finally    Free;  end;end;{ TCustomGroup }constructor TCustomGroup.Create(const AFileName: string);begin  FFileName := AFileName;end;function TCustomGroup.Exec(ALst: TStrings): Boolean;begin  Result := false;  try    Fill;    Sort;    Output(ALst);    Result := True;  except on E: Exception do    Result := false;  end;end;procedure TCustomGroup.Fill;var  i: Integer;  sLst : TStringList;begin  sLst := TStringList.Create;  try    sLst.LoadFromFile(FFileName);    if sLst.Count < 2 then      Exit;    FCount := sLst.Count;    SetLength(FArr, FCount);    for i := 0 to sLst.Count - 1 do    begin      FillRes(sLst.Strings[i], @FArr[i]);    end;  finally    slst.Free;  end;end;procedure TCustomGroup.FillRes(const Value: string; ARes: PRes);var  idx : integer;begin  idx := Pos(',', value);  ARes.X := StrToInt(Copy(Value, 1, idx - 1));  ARes.Y := StrToInt(Copy(Value, idx + 1, Length(Value)));  ARes.Sum := ARes.X + ARes.Y;end;procedure TCustomGroup.Output(ALst : TStrings);var  vRes : TRes;  procedure Extract(const idx: integer);  begin    if (idx < 0) or (idx >= FCount) then      raise EArgumentOutOfRangeException.CreateRes(@SArgumentOutOfRange);    ALst.Add(Format('%d,%d', [FArr[Idx].X, FArr[Idx].Y]));    Dec(FCount);    if Idx <> FCount then    begin      vRes := FArr[Idx];      Move(FArr[Idx + 1], FArr[Idx], (FCount - Idx) * SizeOf(TRes));      FillChar(FArr[FCount], SizeOf(TRes), 0);    end;  end;var  idx, X, Y : integer;begin  repeat    idx := Low(FArr);    vRes := FArr[idx];    while FCount > idx do    begin      X := Abs(FArr[idx].x - vRes.x);      Y := Abs(FArr[idx].y - vRes.y);      if (X in [0, 1]) and (Y in [0, 1]) then      begin        Extract(idx);      end      else      begin        inc(idx);      end    end;    ALst.Add('');  until FCount = 0;end;procedure TCustomGroup.Sort;var  i, j : integer;  vRes : TRes;begin  for i := low(FArr) to High(FArr) - 1 do  begin    for j := i + 1 to High(FArr) do    begin      if FArr[i].X > FArr[j].X then      begin        vRes := FArr[i];        FArr[i] := FArr[j];        FArr[j] := vRes;      end      else      if (FArr[i].X = FArr[j].X) and (FArr[i].Y > FArr[j].Y) then      begin        vRes := FArr[i];        FArr[i] := FArr[j];        FArr[j] := vRes;      end;    end;  end;end;end.


處理結果

1,12,02,13,12,32,411,3611,3711,3811,3911,4012,4013,4014,4015,4016,3912,3412,3512,3612,3712,3813,3313,3413,3513,3614,3515,3414,3214,3314,3415,3316,3215,3115,3216,3116,3017,29


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.