Pesquisar este blog

Livros Recomendados

domingo, 28 de fevereiro de 2021

URI (BEECROWD) - 1929 - Triângulo - Iniciante - C e C++++

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)

Problema1929

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;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas