
23.06.2011, 23:12
|
Модератор
|
|
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
|
|
Во.
Код:
type
TResultSet = record
Number : Integer;
Src : Array [0..3] Of Integer;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Buf : TResultSet;
AResultSet : Array Of TResultSet;
S1, S2, S3, S4 : Integer;
Iter : Integer;
I, J : Integer;
bFound : Boolean;
iBuf : Integer;
begin
SetLength(AResultSet,0);
Iter := 0;
S1 := 1;
While True Do
Begin
For S2 := 1 To S1 Do
For S3 := 1 To S1 Do
For S4 := 1 To S1 Do
Begin
Buf.Number := sqr(S1) + sqr(S2) + sqr(S3) + sqr(S4);
Buf.Src[0] := S1;
Buf.Src[1] := S2;
Buf.Src[2] := S3;
Buf.Src[3] := S4;
For I := 0 To 2 Do
For J := I+1 To 3 Do
If Buf.Src[i] > Buf.Src[J] Then
Begin
iBuf := Buf.Src[i];
Buf.Src[i] := Buf.Src[J];
Buf.Src[J] := iBuf;
End;
bFound := False;
For I := Low(AResultSet) To High(AResultSet) Do
If (Buf.Number = AResultSet[i].Number) And
((Buf.Src[0] <> AResultSet[i].Src[0]) Or
(Buf.Src[1] <> AResultSet[i].Src[1]) Or
(Buf.Src[2] <> AResultSet[i].Src[2]) Or
(Buf.Src[3] <> AResultSet[i].Src[3]))
Then
Begin
ShowMessage(Format('Found:'#13#10'1: %d = %d + %d + %d + %d'#13#10'2: %d = %d + %d + %d + %d',
[AResultSet[i].Number,AResultSet[i].Src[0],AResultSet[i].Src[1],AResultSet[i].Src[2],AResultSet[i].Src[3],
Buf.Number,Buf.Src[0],Buf.Src[1],Buf.Src[2],Buf.Src[3]]));
Exit;
End
Else
If (Buf.Number = AResultSet[i].Number) Then
Begin
bFound := True;
Break;
End;
If Not bFound Then
Begin
SetLength(AResultSet,Length(AResultSet)+1);
AresultSet[High(AResultSet)] := Buf;
End;
End;
Inc(S1);
Inc(Iter);
If Iter > 1000 Then
Begin
ShowMessage('Not found.');
Exit;
End;
End;
end;
Код немного страшный, зато работает.
|