vanila16
31.01.2023 01:13

Четырехугольник Сергею на уроке геометрии задали следующее задание. Даны пять чисел. Требуется нарисовать произвольный четырехугольник с одной диагональю так, чтобы длины сторон и этой диагонали равнялись заданным числам. Сергею надо выбрать длину диагонали и каждую из сторон так, чтобы было возможно нарисовать требуемую фигуру. Если вариантов решения задачи несколько, можно выбрать любой. Нарисованная диагональ не должна лежать на одной из сторон. Возможно, что нарисовать требуемый четырехугольник не получится. В этом случае надо будет вывести ноль.

Формат входных данных

На вход через пробел подаются пять натуральных чисел от 1 до 1000.

Формат выходных данных

Требуется вывести ответ в следующем порядке. В первой строке вывести одно число — длину диагонали четырехугольника. Во второй строке два числа — длины отрезков лежащих с одной стороны от диагонали. В третьей строке еще два числа — длины отрезков лежащих с другой стороны от диагонали. Если построить четырехугольник невозможно, то вывести 0.

В этой задаче можно выводить любой правильный ответ. В частности, можно переставить числа в одной строке или поменять местами вторую и третью строку.

Методика проверки и пояснение к тестам

В первом тесте в качестве диагонали можно взять отрезок длины 7. Тогда с одной стороны от диагонали будут стороны с длинами 3 и 5, а с другой — 9 и 3. Вторую и третью строку, а также числа в этих строках можно вывести в любом порядке. Также возможно нарисовать четырехугольник с диагональю 5 и длинами сторон 9, 7 и 3, 3. Кроме того, возможен вариант с диагональю 3 и длинами сторон 5, 3 и 7, 9 Любой из этих вариантов будет считаться верным.

Во втором тесте нарисовать четырехугольник невозможно.

Программа проверяется на 20 тестах. Прохождение каждого теста оценивается в Тесты из условия задачи при проверке не используются.

Sample Input 1:

3 9 5 3 7

Sample Output 1:

7
3 5
9 3

Sample Input 2:

3 9 5 1 7

Sample Output 2:

0

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
DrSteklis
13.11.2021 20:42
Полный код программы

var
    k, rk, n: longint;

function f(n: longint): longint;
begin
    f := n * n * n;
end;

function calc(k: longint): longint;
var
    i: longint;
begin
    i := 1;
    while f(i) < k do
        i := i + 1;
   
    if f(i) - k <= k - f(i - 1) then
        calc := i
    else calc := i - 1;
end;

begin
    rk := calc(10);
    n := 0;
    for k := 1 to 1000 do
        if calc(k) = rk then
        begin
            writeln('calc(', k, ') = ', calc(k));
            n := n + 1;
        end;
   
    writeln(n);
end.

вывод
calc(5) = 2
calc(6) = 2
calc(7) = 2
calc(8) = 2
calc(9) = 2
calc(10) = 2
calc(11) = 2
calc(12) = 2
calc(13) = 2
calc(14) = 2
calc(15) = 2
calc(16) = 2
calc(17) = 2
13
0,0(0 оценок)
Ответ:
Gllodory
13.11.2021 20:42

Для начала смотрим что выходит при К= 36, выходит 5

Анализируем функцию F. Это линейная функция наподобии Фибоначи, значит ответом будет некий один отрезок из К

Потом немножко дорабатываем программу и смотрим на результат


var

   i, K, counter: integer;

function F(x: integer): integer;

begin

   if x < 2 then

       F := 1

   else F := F(x - 1) + 2 * F(x - 2);

end;

begin

   for K := 0 to 100 do  

   begin

       i := 28;

       //        readln(K);

       while (i > 0) and (F(i) > K) do  

           i := i - 1;

       

       if i = 5 then begin

           counter := counter + 1;

           writeln(counter, ') K = ', K);

       end;

   end

end.


Вывод

1) K = 21

2) K = 22

3) K = 23

4) K = 24

5) K = 25

6) K = 26

7) K = 27

8) K = 28

9) K = 29

10) K = 30

11) K = 31

12) K = 32

13) K = 33

14) K = 34

15) K = 35

16) K = 36

17) K = 37

18) K = 38

19) K = 39

20) K = 40

21) K = 41

22) K = 42


ответ 22

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота