Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1929. Mostrar todas as postagens
Mostrando postagens com marcador 1929. Mostrar todas as postagens

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

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