Kvadrat otlaq#10556

Kvadrat otlaq (Həll təhlili)

Tutaq ki, düzbucaqlıların koordinatları aşağıdakı kimi verilib:

Hər iki başlanğıc düzbucaqlını tam əhatə edən minimal ölçülü düzbucaqlını nəzərdən keçirək. Onun qarşı bucaqlarını (minx, miny) və (maxx, maxy) kimi işarə edək. Onda:

Əhatə edən düzbucaqlının ölçüləri bərabərdir:

Hər iki düzbucaqlının kvadratla tam əhatə oluna bilməsi üçün kvadratın tərəfi həm length-dən, həm də -dən kiçik olmamalıdır. Buna görə minimal kvadrat otlağın tərəfinin uzunluğu bu iki kəmiyyətin maksimumuna bərabərdir:

side = max(length, width)

Misal

İki başlanğıc düzbucaqlını nəzərdən keçirək:

Nəticə düzbucaqlısının sərhədlərini hesablayaq:

Əhatə edən düzbucaqlının ölçüləri bərabərdir:

Əhatə edən kvadratın tərəfinin uzunluğu olacaq:

side = max(7, 3) = 7

Deməli, minimal əhatə edən kvadratın sahəsi 7^2 = 49-a bərabərdir.

Alqoritmin realizasiyası

Əhatə edən düzbucaqlının sərhədlərini ilkinləşdirək. Koordinatlar -dan -a qədər diapazonda olduğundan, ilkin qiymətləri aşağıdakı kimi təyin etmək olar:

minx = 10; maxx = 0; miny = 10; maxy = 0;

İki başlanğıc düzbucaqlının koordinatlarını oxuyuruq. Hər düzbucaqlı üçün əhatə edən düzbucaqlının sərhədlərini yeniləyirik.

for (i = 0; i < 2; i++)
{
  scanf("%d %d %d %d", &a1, &b1, &a2, &b2);
  if (a1 < minx) minx = a1;
  if (a2 > maxx) maxx = a2;
  if (b1 < miny) miny = b1;
  if (b2 > maxy) maxy = b2;
}

Əhatə edən düzbucaqlının uzunluğunu və enini hesablayırıq.

l = maxx - minx;
w = maxy - miny;

Bu düzbucaqlını kvadratla əhatə etmək üçün kvadratın tərəfi onun həm uzunluğundan, həm də enindən kiçik olmamalıdır. Buna görə iki kəmiyyətdən böyüyünü seçirik.

len = (l > w) ? l : w;

Kvadratın sahəsini hesablayırıq və cavabı çap edirik.

area = len * len;
printf("%d\n", area);