Задача. Прямоугольный или нет?
Условие задачи:
Задано длины сторон треугольника. Определить, является ли этот треугольник прямоугольным.
Входные данные:
В единственной строке задано 3 натуральных числа — длины сторон треугольника. Длины сторон не превышают 1000.
Выходные данные:
Вывести «YES» (без кавычек), если треугольник прямоугольный, или «NO» (без кавычек) в противном случае.
Тесты
a | b | c | answer |
3 | 4 | 5 | «YES» |
1 | 2 | 3 | «NO» |
5 | 3 | 4 | «YES» |
Код:
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <math.h> using namespace std; int main() { long int a,b,c; cin>>a>>b>>c; cout << (((a*a)+(b*b))==(c*c)||((a*a)+(c*c))==(b*b)|| ((c*c)+(b*b))==(a*a)?"YES":"NO")<< endl; return 0; } |
Объяснение Кода:
Нам надо проверить является ли прямоугольным треугольник из сторон: a, b, c.
Я проверял через теорему Пифагора «В прямоугольном треугольнике площадь квадрата, построенного на гипотенузе, равна сумме площадей квадратов, построенных на катетах. (wikipedia)». То есть стороны подставлял в формулу [latex]a^2+b^2=c^2[/latex], где [latex]a[/latex] и [latex] b[/latex] катеты а [latex]c[/latex] гипотенуза. Если стороны подходят в формулу то можно построить прямоугольник и выводим «YES» в противном случае выводим «NO». Проверял я через тернарный оператор _?_:_ c проверкой трёх вариантов гипотенузы.
Ссылка на задачу в e-olimp.
Ссылка на код в ideone.
Ссылка на пройденные тесты в e-olimp.
У Вас есть 3 стратегии доработки программы.
1. Сначала о минимальных переделках:
— уберите невозможные и повторные варианты в условии (например, (a[1]*a[1])+(a[2]*a[2]))==(a[1]*a[1])). Оставьте только три, в зависимости от того какая из трёх сторон предполагается гипотенузой,
— замените while на if-else или _?_:_,
— оставьте один return в самом конце.
— уберите все строки с переменной d — не знаю, что они тут делают.
2. Теперь о решении, которое я ожидал — три переменные и один тернарный оператор _?_:_ c проверкой трёх вариантов гипотенузы.
3. Если Вы решили использовать массивы и циклы, то нужно придать этому какую-то цель. Например, вместо сложного условия проверить в цикле три простых. Т.е. сделать цикл проверки a[i] на диагональ.
Выберите любую стратегию и переделайте, пожалуйста.
— Необходимо все формулы переделать в latex
— Тесты лучше сделать в виде таблицы. И нужно добавить несколько своих.
— Добавьте, пожалуйста, ключевые слова — tags
Очень хорошо. Молодец.
— Только замените три тернарных оператора на один. Для этого соедините все три условия при помощью логического или ||. Разве у Вас так не было с самого начала?
– Необходимо все формулы переделать в latex
– Тесты лучше сделать в виде таблицы. И нужно добавить несколько своих.
– Добавьте, пожалуйста, ключевые слова – tags
– Необходимо все формулы переделать в latex. У Вас проблема с этим? Посмотрите в разделе Questions.
— Ничего из перечисленного Вами ( e-olymp, e-olymp 915, Прямоугольный или нет?, Радомир Сиденко) не является ключевым словом. Т.е. это всё не существенно для сути этой публикации. А что существенно? Например, «Теорема Пифагора»
Зачтено.
С формулами latex просто будьте аккуратнее — там затесались какие-то не отображаемые символы вместо ненужных пробелов.