Algorithm
Problem Name: 2 AD-HOC - beecrowd | 2397
Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/2397
Triângulos
Por OBI - Olimpíada Brasileira de Informática 2011 Brazil
Timelimit: 1
Caio estava brincando de construir triângulos com palitos de diferentes tamanhos. Ele fazia isso juntando as pontas de três palitos sobre uma mesa. Ele notou que podia agrupar os triângulos formados em três grupos:
- Triângulos acutângulos, que são aqueles em que todos os ângulos internos medem menos de 90°;
- Triângulos retângulos, que são aqueles que possuem um ângulo interno que mede exatamente 90°;
- Triângulos obtusângulos, que são aqueles que possuem um ângulo interno que mede mais de 90°.
Ele também percebeu que nem sempre é possível formar um triângulo com três palitos.
Sua tarefa é, dados os comprimentos A, B e C de três palitos, dizer se é possível formar um triângulo com esses palitos e, em caso afirmativo, dizer a qual grupo o triângulo formado pertence.
Entrada
A entrada consiste de uma única linha, contendo três inteiros A, B e C (1 ≤ A, B, C ≤ 104) separados por espaço.
Saída
Imprima uma linha contendo apenas uma letra minúscula:
- 'n' se não for possível formar um triângulo;
- 'a' se o triângulo formado for acutângulo;
- 'r' se o triângulo formado for retângulo;
- 'o' se o triângulo formado for obtusângulo.
Exemplos de Entrada | Exemplos de Saída |
1 1 1 |
a |
Code Examples
#1 Code Example with C++ Programming
Code -
C++ Programming
#include <algorithm>
#include <cstdio>
using namespace std;
#define desigugalde(A, B, C) ((A + B) > (C))
int main() {
int a, b, c, x, y, z;
scanf("%d %d %d", &a, &b, &c);
if (!desigugalde(a, b, c) || !desigugalde(b, c, a) ||
!desigugalde(c, a, b)) {
printf("n\n");
return 0;
}
x = max(a, max(b, c));
y = min(a, min(b, c));
z = a + b + c - x - y;
x *= x;
y *= y;
z *= z;
if (x == y + z)
printf("r\n");
else if (x > y + z)
printf("o\n");
else
printf("a\n");
return 0;
}
Copy The Code &
Try With Live Editor
Input
Output
#2 Code Example with Javascript Programming
Code -
Javascript Programming
const { readFileSync } = require("node:fs")
const [A, B, C] = readFileSync("/dev/stdin", "utf8")
.split(" ", 3)
.map(value => Number.parseInt(value, 10))
const Triangle = {
isTriangle(a, b, c) {
const sides = [a, b, c].sort((a, b) => a - b)
if (sides.some(side => side <= 0)) return false
else if (sides[0] + sides[1] <= sides[2]) return false
else return true
},
isPitagoric(/** @type {[number, number, number]}*/[a, b, c]) {
return (a * a + b * b) == c * c || (a * a + c * c) == b * b || (b * b + c * c) == a * a
},
getTriangleTypesFromSides(sides = [0, 0, 0]) {
const [a, b, c] = sides.sort((a, b) => b - a)
if (sides.every(s => s === a)) return "EQUILATERO"
else if (a == b || a == c || b == c) return "ISOSCELES"
else return "ESCALENO"
},
getTriangleTypesFromAngles(sides = [0, 0, 0]) {
const [a, b, c] = sides.sort((a, b) => b - a)
if (Math.pow(a, 2) == Math.pow(b, 2) + Math.pow(c, 2)) return "RETANGULO"
else if (Math.pow(a, 2) > Math.pow(b, 2) + Math.pow(c, 2)) return "OBTUSANGULO"
else if (Math.pow(a, 2) < Math.pow(b, 2) + Math.pow(c, 2)) return "ACUTANGULO"
}
}
function main() {
const output = []
const sides = [A, B, C]
if (Triangle.isTriangle(...sides)) {
switch (Triangle.getTriangleTypesFromAngles(sides)) {
case "RETANGULO": output.push("r"); break
case "OBTUSANGULO": output.push("o"); break
case "ACUTANGULO": output.push("a"); break
}
}
else output.push("n")
console.log(output.join("\n"))
}
main()
Copy The Code &
Try With Live Editor
Input
Output