Viết chương trình tìm tất cả các cặp tam giác khác nhau có cùng chu vi từ 06 (sáu) đoạn thẳng cho trước.
- Input: Gồm 06 (sáu) số tự nhiên lớn hơn không, là độ dài của 06 (sáu) đoạn thẳng, mỗi giá trị cách nhau ít nhất một ký tự trắng.
- Output: Là các cặp tam giác khác nhau có cùng chu vi, mỗi cặp tam giác in trên một dòng theo dạng biểu thức. Trong trường hợp không tìm được thì thông báo “KHONG TIM DUOC”.
Chương trình ví dụ:
Mã: Chọn tất cả
Input: 48 49 60 65 70 71
Output:
Cap thu 1: 48+60+71=49+60+70
Cap thu 2: 48+65+71=49+65+70
Mã: Chọn tất cả
Uses Crt;
Var mTest : Array[1..3] Of Byte;
mData : Array[1..20] Of Integer;
mResult : Array[1..3, 1..1000] Of Integer;
Sl : Integer;
X : Byte;
Function TG(a, b, c : Integer) : Boolean;
Begin
TG := False;
If (a + b > c) And
(b + c > a) And
(c + a > b)
Then TG := True;
End;
Procedure Save(a, b, c : Integer);
Begin
Inc(Sl);
mResult[1, Sl] := a;
mResult[2, Sl] := b;
mResult[3, Sl] := c;
End;
Function CheckDup(a, b, c : Integer) : Boolean;
Var i : Integer;
Begin
CheckDup := False;
For i := 1 To Sl Do
If (a = mResult[1, i]) And (b = mResult[2, i]) And (c = mResult[3, i]) Then CheckDup := True;
End;
Procedure Print;
Var k, i, j : Integer;
Begin
k := 0;
For i := 1 To Sl-1 Do
For j := i+1 To Sl Do
If mResult[1, i] + mResult[2, i] + mResult[3, i] =
mResult[1, j] + mResult[2, j] + mResult[3, j]
Then Begin
Inc(k);
Write('Cap thu ', k, ': ');
Write(mResult[1, i], '+');
Write(mResult[2, i], '+');
Write(mResult[3, i]);
Write('=');
Write(mResult[1, j], '+');
Write(mResult[2, j], '+');
WriteLn(mResult[3, j]);
End;
If k = 0 Then WriteLn('KHONG TIM DUOC');
End;
Procedure Process;
Var i, j : Byte;
a, b, c : Integer;
Begin
For i := 1 To 2 Do
For j := i+1 To 3 Do
If (mTest[i] >= mTest[j]) Or (mData[mTest[i]] = mData[mTest[j]]) Then Exit;
a := mData[mTest[1]];
b := mData[mTest[2]];
c := mData[mTest[3]];
If TG(a, b, c) And (Not CheckDup(a, b, c)) Then Save(a, b, c);
End;
Procedure Test(k : Byte);
Var i : Byte;
Begin
For i := 1 To X Do Begin
mTest[k] := i;
If k = 3 Then Process Else Test(k+1);
End;
End;
Var i : Byte;
Flag : Boolean;
Begin
ClrScr;
Sl := 0;
Flag := True;
X := 6;
For i := 1 To X Do
Begin
Read(mData[i]);
If mData[i] <= 0 Then Begin
WriteLn('So thu ', i, ' khong hop le');
Flag := False;
End;
End;
ReadLn;
If Flag Then Begin
Test(1);
Print;
End;
ReadLn;
End.