Pesquisar este blog

Livros Recomendados

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

sábado, 7 de outubro de 2023

URI (BEECROWD) - 2840 - Balão++ - Geometria - C, C++, Haskell

Acabei de perceber que já tinha resolvido esse exercício, mas não postei a resposta. Então, hoje trago ela aqui pra todo mundo saber como se resolve o exercício Balão++. Dessa vez, exibo a solução em três linguagens, C, C++ e Haskell. Confira!

Plataforma: URI (BEECROWD)

Problema2840

Enunciado: Espero que você esteja curtindo a competição :D.

Nós, os autores (Diego Rangel, Francisco Arcos, Gabriel Duarte e Gustavo Policarpo), estamos felizes por você estar tentando resolver nossos problemas. Para você que é iniciante não sair da sala sem nenhum balão, aqui vai um desafio para você:

Neste ano os balões têm formato esférico, segundo a empresa que produz os balões: "(...) por motivos complexos de engenharia esse formato é melhor (...)" vai entender...

Entretanto esse formato faz com que o balão use mais gás hélio e isso causou um problema, pois o organizador já havia comprado um tanque com L litros de gás antes dessa novidade no mercado de balões.

Sabendo o raio do modelo de balões e a quantidade de gás hélio disponível, você poderia ajudar a equipe dizendo quantos balões podem ser enchidos completamente?

Solução:

Basicamente, precisamos ler dois valores e manipulá-los como números de ponto flutuante.

A fórmula do volume é (4/3) * pi * r³, sendo r o primeiro valor lido.

A resposta é o piso do resultado da divisão de l (segundo valor lido) pelo volume.

Fácil, né não?

Código em Haskell:

main :: IO ()
main = do
   line <- getLine
   let [r, l] = map read (words line) :: [Double]
   let vol = (4/3) * (3.1415 * r * r * r)
   let ans = l / vol
   print (floor ans)

Código em C:

#include <stdio.h>
#include <math.h>

int main () {

	double r, l, vol, total;
	scanf("%lf %lf", &r, &l);
	vol = (4/3.0) * (3.1415 * pow(r, 3));
	total = l / vol;
	int ans = floor(total);
	printf("%d\n", ans);
	return 0;
}

Código em C++:

#include <iostream>
#include <cmath>

using namespace std;

int main () {
	double r, l;
	cin >> r >> l;
	double vol = (4/3.0) * (3.1415 * pow(r, 3));
	double total = l / vol;
	int ans = floor(total);
	cout << ans << endl;
	return 0;
}

segunda-feira, 15 de março de 2021

URI (BEECROWD) - 2518 - Escada do DINF - Geometria Computacional - C++

Oi gente, dessa vez resolvi um problema do URI/BEECROWD da categoria Geometria Computacional! É o problema Escada do DINF. Geometria Computacional é uma área com a qual não tenho tanta afinidade, mas esse exercício era bem simples, então resolvi e postei aqui para vocês. Espero que curtam!

Plataforma: URI (BEECROWD)

Problema2518

Enunciado:

O prédio do Departamento de Ilhas Naturais Federais (DINF) está passando por uma reforma para deixá-lo mais acessível. No prédio há uma escada de N degraus. Cada degrau tem H centímetros de altura, C centímetros de comprimento e L centímetros de largura. A figura (a) exemplifica uma escada com N=4 degraus.

Para tornar o prédio mais acessível, o chefe do DINF decidiu colocar uma rampa sobre a escada. A rampa é rígida e tem forma retangular. Ela será colocada sobre a escada de forma a cobrir todos os seus degraus, como indicado pela figura (b).

Sua tarefa é, dado o número de degraus e suas medidas, determinar qual deve ser área total da superfície da rampa.


Linguagens: C e C++


Solução: 

Código em C:

#include <stdio.h>
#include <math.h>

int main() {
    
    int n, h, c, l;
    double hipotenusa;
    while (scanf("%d", &n) != EOF) {
        scanf("%d %d %d", &h, &c, &l);
        
        hipotenusa = sqrt(h * h + c * c);
        printf("%.4lf\n", (hipotenusa * n * l)/10000);
    }

    return 0;
}

Código em C++:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main() {
    
    int n, h, c, l;
    double hipotenusa;
    while (cin >> n) {
        cin >> h >> c >> l;
        
        hipotenusa = sqrt(h * h + c * c);
        cout << fixed << setprecision(4) << ((hipotenusa * n * l)/10000) << endl;
    }

    return 0;
}

sábado, 26 de dezembro de 2020

URI - 1039 - Geometria Computacional - Flores de Fogo - C++

Plataforma: URI

Problema1039

Enunciado:

Nos dias atuais uma flor de fogo não é algo considerado estranho para muitos jovens.  Isso porque um famoso jogo de videogame popularizou esse tipo de flor. Nesse jogo o protagonista ganhava superpoderes ao tocar em uma flor de fogo, passando a atirar pequenas bolas de fogo para derrotar seus inimigos.

No entanto, já se falava sobre flores de fogo há muito tempo atrás. Na mitologia polonesa, flores de fogo são flores místicas de grande poder guardadas por espíritos malignos. Ela possuía esse nome porque brilhava tanto que era impossível olhá-la diretamente. Quem possuísse uma flor dessas ganharia a habilidade de ler a mente de outras pessoas, encontrar tesouros escondidos e repelir todos os males.

Para obter uma flor de fogo, a pessoa deveria procurá-la em uma floresta antes da meia-noite na véspera do Noc Kupały. Exatamente à meia-noite ela floresceria. Para colhê-la seria preciso desenhar um círculo em volta dela. Parece uma tarefa fácil, no entanto, os espíritos malignos que guardam a flor tentariam de tudo para distrair qualquer um tentando colher a flor. Se a pessoa falhasse ao tentar desenhar um círculo em volta da flor, teria sua vida sacrificada.

Dados dois círculos, um desenhado por um ambicioso caçador de flores de fogo e outro representando a área da flor, sua tarefa é determinar se o caçador morre ou fica rico com sua conquista.

Linguagem: C++

Solução:


#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int r1, x1, y1, r2, x2, y2;
    double d;
    while (cin >> r1 >> x1 >> y1 >> r2 >> x2 >> y2) {
        d = sqrt(pow(x2 - x1, 2)+pow(y2 - y1, 2));
        if (r1 >= d + r2)
            cout << "RICO" << endl;
        else
            cout << "MORTO" << endl;
    }
    
    return 0;
}

URI (BEECROWD) - 1039 - Geometria Computacional - Flores de Fogo (Fire Flowers) - C

Hoje vamos resolver um problema de Geometria Computacional!

Não tenho muito costume de resolvê-los até por falta de formação. Eles exigem uma forte base matemática. Mas esse aqui não é dos mais complexos, então foi possível resolvê-lo para vocês :)

Vocês verão que a solução é bem simples mesmo, basta a aplicação de uma simples fórmula bastante conhecida.

Bora conferir? ;)


Plataforma: URI (BEECROWD)

Problema1039

Enunciado:

Nos dias atuais uma flor de fogo não é algo considerado estranho para muitos jovens.  Isso porque um famoso jogo de videogame popularizou esse tipo de flor. Nesse jogo o protagonista ganhava superpoderes ao tocar em uma flor de fogo, passando a atirar pequenas bolas de fogo para derrotar seus inimigos.

No entanto, já se falava sobre flores de fogo há muito tempo atrás. Na mitologia polonesa, flores de fogo são flores místicas de grande poder guardadas por espíritos malignos. Ela possuía esse nome porque brilhava tanto que era impossível olhá-la diretamente. Quem possuísse uma flor dessas ganharia a habilidade de ler a mente de outras pessoas, encontrar tesouros escondidos e repelir todos os males.

Para obter uma flor de fogo, a pessoa deveria procurá-la em uma floresta antes da meia-noite na véspera do Noc Kupały. Exatamente à meia-noite ela floresceria. Para colhê-la seria preciso desenhar um círculo em volta dela. Parece uma tarefa fácil, no entanto, os espíritos malignos que guardam a flor tentariam de tudo para distrair qualquer um tentando colher a flor. Se a pessoa falhasse ao tentar desenhar um círculo em volta da flor, teria sua vida sacrificada.

Dados dois círculos, um desenhado por um ambicioso caçador de flores de fogo e outro representando a área da flor, sua tarefa é determinar se o caçador morre ou fica rico com sua conquista.

Linguagem: C

Solução:

#include <stdio.h>
#include <math.h>

int main() {
    int r1, x1, y1, r2, x2, y2;
    double d;
    while (scanf("%d %d %d %d %d %d", &r1, &x1, &y1, &r2, &x2, &y2) != EOF) {
        d = sqrt(pow(x2-x1,2)+pow(y2-y1,2));
        if (r1 >= d + r2)
            printf("RICO\n");
        else
            printf("MORTO\n");
    }
    
    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