Tam giác được tạo thành từ 03 (ba) đoạn
thẳng và thỏa mãn điều kiện tổng hai cạnh bất kỳ lớn hơn cạnh thứ ba. Hai tam
giác khác nhau khi có ít nhất một cạnh có độ dài khác so với tam giác kia.
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 cho
trong tập tin BAI3.INP gồm 01 (một)
dòng duy nhất 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
ghi vào tập tin BAI3.OUT là các cặp
tam giác khau 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ụ:
BAI2.INP
|
BAI2.OUT
|
48 49 60 65 70 71
|
Cap thu 1: 48+60+71=49+60+70
Cap thu 2: 48+65+71=49+65+70
|
CODE THAM KHẢO:
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
assign(input,'BAI2.INP'); reset(input);
assign(output,'BAI2.OUT'); rewrite(output);
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;
close(input); close(output);
End.
Đăng nhận xét