線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5758
推到 Plurk!
推到 Facebook!

取連續值的問題

答題得分者是:hagar
inglong
初階會員


發表:28
回覆:27
積分:36
註冊:2004-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-30 17:07:55 IP:220.134.xxx.xxx 訂閱
大家好,如果我有13個數字, 例如一個陣列裡有13個值  (3,4,4,10,4,7,10,9,9,,11,12,13,14) 
我要如何去判斷這個列裡面是否有 五個值連續 例如上述陣列裡有 (10,11,12,13,14)or(9,10,11,12,13)
要怎麼取出來呢?

百思不得其解
請各位幫幫忙;
以下是我的做法;請大家幫忙看看;不知道是否行的通
<textarea class="delphi" rows="10" cols="60" name="code"> var i,j,k,L,m:integer; ini:array[1..13]of integer;//資料陣列 newa:array[1..13]of integer;//要去出來的新陣列 begin .... .... for i:=1 to 11 do begin for j:=i 1 to 12 do begin for k:=j 1 to 11 do begin for L:=k 1 to 12 do begin for m:=L 1 to 13 do begin if abs(ini[i]-ini[j])=1 then begin if abs(ini[j]-ini[k])=1 then begin if abs(ini[k]-ini[L])=1 then begin if abs(ini[L]-ini[n])=1 then begin newa[i]:=ini[i]; end; end; end; end; end; end; end; end; end; ... ... end; </textarea>
------
何需Coding爭峰
千人指 萬人鋒
敢問Coding頂峰
三尺秋水塵不染
天下無雙
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-30 18:10:11 IP:59.124.xxx.xxx 未訂閱
function CompareInt(List: TStringList; Index1, Index2: Integer): Integer;
var
d1, d2: Integer;
r1, r2: Boolean;
function IsInt(AString : string; var AInteger : Integer): Boolean;
var
Code: Integer;
begin
Val(AString, AInteger, Code);
Result := (Code = 0);
end;
begin
r1 := IsInt(List[Index1], d1);
r2 := IsInt(List[Index2], d2);
Result := ord(r1 or r2);
if Result <> 0 then
begin
if d1 < d2 then
Result := -1
else if d1 > d2 then
Result := 1
else
Result := 0;
end else
Result := lstrcmp(PChar(List[Index1]), PChar(List[Index2]));
end;

function CheckContinuous(n1,n2,n3,n4,n5: integer): Boolean;
begin
Result := True;
if n2 - n1 <> 1 then
begin
Result := False;
Exit;
end;
if n3 - n2 <> 1 then
begin
Result := False;
Exit;
end;
if n4 - n3 <> 1 then
begin
Result := False;
Exit;
end;
if n5 - n4 <> 1 then
begin
Result := False;
Exit;
end;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
const
array1: array[1..13] of integer = (3,4,4,10,4,7,10,9,9,11,12,13,14);
var
i: integer;
sl: TStringList;
begin
sl := TStringList.Create;
try
for i := 1 to 13 do
begin
if sl.IndexOf(IntToStr(array1[i])) = -1 then
sl.Add(IntToStr(array1[i]));
end;
sl.CustomSort(CompareInt);
i := 0;
while i < sl.Count - 4 do
begin
caption := sl.Strings[i 4];
if CheckContinuous(StrToInt(sl.Strings[i]),
StrToInt(sl.Strings[i 1]),
StrToInt(sl.Strings[i 2]),
StrToInt(sl.Strings[i 3]),
StrToInt(sl.Strings[i 4])) then
begin
Memo1.Lines.Add(sl.Strings[i] ','
sl.Strings[i 1] ','
sl.Strings[i 2] ','
sl.Strings[i 3] ','
sl.Strings[i 4]);
end;
Inc(i);
end;
finally
sl.Free;
end;
end;

系統時間:2024-11-10 20:48:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!