BÀI TẬP 66: Tam giác bằng nhau (Bài 3 – Đề thi Tin học trẻ Tỉnh An Giang 2018 - 2019)

tam giác bằng nhau, pascal

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.


Nhãn:

Đăng nhận xét

[blogger]

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget