O problema Triângulo é de nível iniciante. Foi bem bacana resolver este problema. Veja abaixo, nesse post, como ficou a minha solução!
Plataforma: URI (BEECROWD)
Problema: 1929
Enunciado:
Ana e suas amigas estão fazendo um trabalho de geometria para o colégio, em que precisam formar vários triângulos, numa cartolina, com algumas varetas de comprimentos diferentes. Logo elas perceberam que não dá para formar triângulos com três varetas de comprimentos quaisquer: se uma das varetas for muito grande em relação às outras duas, não dá para formar o triângulo.
Neste problema, você precisa ajudar Ana e suas amigas a determinar se, dados os comprimentos de quatro varetas, é ou não é possível selecionar três varetas, dentre as quatro, e formar um triângulo.
Linguagens: C e C++
Solução:
Criei uma função para testar as condições de ser triângulo, comparando a soma dos lados e também a diferença de seus valores absolutos. Antes de chamar esta função, utilizei o qsort (Quick Sort) para ordenar os valores recebidos, o que facilitar na hora de criar as condições.
Código em C:
#include <stdio.h> #include <stdlib.h> #include <math.h> int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int ehTri(int a, int b, int c) { int ok = 0; return (abs(b - c) < a && a < b + c || abs(a - c) < b && b < a + c || abs(a - b) < c && c < a + b)? 1 : 0; } int main() { int a[4]; scanf("%i %i %i %i", &a[0], &a[1], &a[2], &a[3]); qsort(a, 4, sizeof(int), compare); int i = 0; if (ehTri(a[0], a[1], a[2]) || ehTri(a[1], a[2], a[3])) printf("S\n"); else printf("N\n"); return 0; }
Código em C++:
Código com lógica exatamente igual ao código em C.
#include <iostream> #include <algorithm> #include <cmath> using namespace std; int ehTri(int a, int b, int c) { int ok = 0; return (abs(b - c) < a && a < b + c || abs(a - c) < b && b < a + c || abs(a - b) < c && c < a + b)? 1 : 0; } int main() { int a[4]; cin >> a[0] >> a[1] >> a[2] >> a[3]; sort(a, a + 4); int i = 0; if (ehTri(a[0], a[1], a[2]) || ehTri(a[1], a[2], a[3])) cout << "S" << endl; else cout << "N" << endl; return 0; }