Розв’язок задачі з Абрамова №217
Лис 10

Всі умови | Умова: Дано натуральне число n, дійсні числа x1, ..., x3n. Послідовність чисел x1, ..., x3n визначає на площині n квадратів зі сторонами, паралельними координатним осей: так, х1, х2 - координати центру першого квадрата, х3 - довжина його сторони; аналогічно, числа х4, х5, х6 визначають другий квадрат, х7, х8, х9 - третій і т. д. Чи є точки, що належать всім квадратах? Якщо так, то вказати координати однієї з них.
(С.А. Абрамов, Г.Г. Гнездилова,Е.Н. Капустина, М.И. Селюн. Задачи по программированию. - Вологда, 2000. - №217)
Розв'язок на С++
#include <stdio.h> #include <iostream> #include <cmath> using namespace std; //hutin puilo la-la-la-la! int main(int argc, char **argv) { int n, i; cout << "n = " ; cin >> n; float x[n]; for (i = 0; i < 3 * n; i++) { cout << "x[" << i << "] = " ; cin >> x[i]; } float xl, xr, yt, yb, l; l = x[2] / 2; xl = x[0] - l; // x left xr = x[0] + l; // x right yb = x[1] - l; // y bottom yt = x[1] + l; // y top //taki eto rabotajet int res = 1; for (i = 3; i < 3 * n; i+=3) { l = x[i + 2] / 2; if ((x[i] + l < xl) || (x[i] - l > xr) || (x[i + 1] + l < yb) || (x[i + 1] - l > yt)) { res = 0; break; } if (x[i] - l > xl) { xl = x[i] - l; } if (x[i] + l < xr) { xr = x[i] + l; } if (x[i + 1] - l > yb) { yb = x[i + 1] - l; } if (x[i + 1] + l < yt) { yt = x[i + 1] + l; } } //Glory to Ukraine! if (res) { cout << "Result: Yes (" << xl << " x " << yb << ")" ; } else { cout << "Result: No " ; } return 0; }