Bài tập C tính diện tích tam giác vuông chỉ cho 1 cạnh góc vuông và 1 điều kiện

Hiện e đang làm bt trên trang của trường link:https://www.spoj.com/ITPTIT/problems/ITP0201F/
em làm bằng vòng lặp mà cứ bị quá thời gian. Các cao nhân cho e giải pháp nào tối ưu hơn đc k ạ

#include <stdio.h>
#include <math.h>

int main()
{
	long long ac=0,bc=0,ab=0,S=0;
	double bcp;
	scanf("%lld",&ac);
	do
	{	
		if(ac==0) break;
		++ab;
		bcp=sqrt(ab*ab+ac*ac);
		bc=bcp;
		if((bc*bc)==(ab*ab+ac*ac) && ((bc-ab)<3))
			printf("%lld",S=ac*ab/2);
	}
	while(((double)(bcp-ab))>1 && S==0);
	if(S==0)
		printf("Just only H.LighT can calculate this!");
	return 0;
}

Bạn chạy thử trong IDE của bạn đi là biết vì sao nó bị quá thời gian liền à, để ý điều kiện vòng lặp nha.

1 Like

Cạnh huyền - cạnh góc vuông < 3, mà 3 cạnh là số nguyên nữa thì từ Pytago suy ra hai phương trình. Rút gọn lại và thay số vào giải là xong.

2 Likes

e chưa hỉu sao pytago lại ra 2 pt ạ, a nói rõ đi, dạo này e lag quá :sweat_smile: :sweat_smile: :sweat_smile:

Cạnh huyền luôn lớn hơn cạnh góc vuông (vì đối diện góc 90o), vậy chỉ có hai khả năng thôi.

2 Likes

có phải 2 trường hợp là cho cạnh huyền lớn hơn 2 cạnh còn lại rồi cho chạy loop đúng k ạ,
e đang suy nghĩ cách nào k cần dùng loop, chỉ cần ct là ra để k bị lỗi quá thời gian :sob: :sob:

Cái này là bài toán mà :smiley:

lời giải

Giữa 0 và 3 chỉ có hai số tự nhiên 1 và 2 :smiley: Nên ta có hai phương trình

n^2 = (AB+1)^2 - AB^2 = 2\cdot AB + 1

n^2 = (AB+2)^2 - AB^2 = 4\cdot AB + 4

Dễ thấy chỉ có 1 phương trình có nghiệm nguyên dương.

4 Likes

:sob: :sob: e cảm ơn :sob: :sob: :sob: học lt mà dốt thế này thì cuốn chiếu tìm nghề khác thôi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?