Четырехугольник Сергею на уроке геометрии задали следующее задание. Даны пять чисел. Требуется нарисовать произвольный четырехугольник с одной диагональю так, чтобы длины сторон и этой диагонали равнялись заданным числам. Сергею надо выбрать длину диагонали и каждую из сторон так, чтобы было возможно нарисовать требуемую фигуру. Если вариантов решения задачи несколько, можно выбрать любой. Нарисованная диагональ не должна лежать на одной из сторон. Возможно, что нарисовать требуемый четырехугольник не получится. В этом случае надо будет вывести ноль.
Формат входных данных
На вход через пробел подаются пять натуральных чисел от 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
c = 15 c = 2.00 c = 25 c = 9
c = 3 c = 1 c = 100 100
'qm' c = '' c = school2 error
Объяснение:
+ сложение(если строку str складывают с другой они просто скрепляются
// деление с выделением целой части
/ обычное деление чисел (происходит в формате float) даже если ответ целое число мы показывает десятые и сотые числа
% деление с выделением остатка
* умножение (если строка str умножается на целое число, то эта строка пишется несколько раз БЕЗ ПРОБЕЛА
** возведение в степень
max функция которая ищет максимум
строку на строку перемножать нельзя программа ложиться и выдаёт ошибку
Итак, целевой язык - C++. Это значит мы - радостные обладатели технологии потоков, с коей мы будем производить весь ввод/вывод как при работе с файлами, так и при работе со стандартным вводом/выводом (консолью).
Ну а раз уж мы работаем с потоками, то будем делать это красивенько: создадим класс-обёртку для потока ввода, цель которого - поиск в этом потоке цитат и отправка их на поток вывода (который мы передаём).
[!] Стоит отметить, что по заданию не сказано, что есть разница между ' и ". Поэтому будем считать их одинаковыми.
[!] Внимание! Рядом с исполняемым файлом надо создать текстовый файл data.txt c текстом и цитатами.
КодС++11
#include <iostream>#include <fstream>using std::cout;class QuotesFinder { std::istream &in_stream; bool is_it_in_quote = false;public: QuotesFinder() = delete; QuotesFinder(QuotesFinder&&) = default; QuotesFinder(QuotesFinder const&) = default; explicit QuotesFinder(std::istream &is) : in_stream(is) {} [[nodiscard]] bool eof() const { return in_stream.eof(); } // Вот тут происходит вся магия QuotesFinder& operator >> (std::ostream& out_stream) { char buffer; in_stream.get(buffer); //Получаем очередной символ из потока if (buffer == '\"' || buffer == '\'') { if (is_it_in_quote) { is_it_in_quote = false; out_stream << buffer; out_stream << "\n"; return *this; } is_it_in_quote = true; } if (is_it_in_quote) { out_stream << buffer; } return *this; }};int main() { std::ifstream file("data.txt"); // Открываем файл if (!file.is_open()) { cout << "File is not exits!"; return 1; } QuotesFinder finder(file); // Создаём обёртку из файлового потока while (!finder.eof()) // Пока не достигли конца потока finder >> cout; // переправляем очередной кусок информации в поток вывода}