取連續值的問題 |
答題得分者是:hagar
|
inglong
初階會員 發表:28 回覆:27 積分:36 註冊:2004-08-13 發送簡訊給我 |
大家好,如果我有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 發送簡訊給我 |
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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |