Trang 1 trong tổng số 1

Bài tập: Tìm các tam giác bằng nhau từ các cạnh cho trước

Đã gửi: CN 05 Th9, 2021 15:22
bởi huynhbuutam
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: 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ã nguồn:

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.