Pesquisar este blog

Livros Recomendados

segunda-feira, 15 de fevereiro de 2021

URI (BEECROWD) - 1541 - Construindo Casas - Iniciante - C e C++

Olá! Nesse post trago a solução para outro problema iniciante: "Construindo Casas". Abaixo você obtém todas as informações sobre o problema e sua solução. Confira!

Plataforma: URI (BEECROWD)

Problema1541

Enunciado:
Sr PI é um construtor muito famoso na cidade de Programolândia. Ele precisa de sua ajuda para encontrar os melhores terrenos da cidade, para realizar assim a construção de vários projetos de casas que possui. Considere que ele tenha por exemplo, um projeto para construir uma casa de 8 metros por 10 metros, e a legislação do município permite a construção de no máximo 100% do terreno. Como todos os terrenos nesta cidade são perfeitamente quadrados e o valor dos lados da casa são apenas uma referência para a área total a ser construída (80 metros quadrados), o sr PI precisaria de um terreno de 8.994 metros, o que simplificado daria como resultado 8 metros e o tamanho real da casa seria de 64 metros quadrados. Se a legislação permitisse a utilizar 50% do terreno, o mesmo teria que ter 160 metros para que 50% dele fosse 80 metros quadrados, o suficiente para uma casa de 8 x 8 metros (64 metros quadrados). No primeiro caso de teste, como o percentual para construir é de apenas 20%, o terreno teria que ter 20 metros de lado para que 1/5 deste terreno tivesse o tamanho de 80 metros quadrados. Ajude o sr PI a determinar o tamanho minimo do terreno.

Linguagens: C e C++

Solução:

Em todas as soluções a fórmula é a mesma, raíz quadrada de a*b*100/c. Mudam poucos detalhes nas soluções, confira abaixo.

Código em C:

Criei um laço de repetição infinito com while (1) e li o valor de a. Se este valor for zero, já interrompe a execução, pois chegou à entrada final. Depois lê b e c e imprime a fórmula. É necessário fazer o cast para inteiro, pois sqrt retorna double.

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

int main() {
    int a, b, c;
    
    while (1) {
        
        scanf("%i", &a);
        if (a == 0)
            break;
        
        scanf("%i %i", &b, &c);
    
        printf("%i\n", (int) sqrt(a * b * 100 / c));
    }
    
    return 0;
}

Código em C++:

Aqui optei por ler o valor de a e depois testar se ele é zero num laço de repetição. Dentro desse laço eu leio a novamente no fim, garantindo assim que ele vai repetir. As primeiras ações no bloco while são ler b e c. Aqui eu os li separadamente, mas poderia ter lido no mesmo cin. O resultado da fórmula eu salvei na variável result, do tipo inteiro, então já converte automaticamente para int. Depois basta imprimir result, sem esquecer da quebra de linha.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <iostream>
#include <cmath>
using namespace std;

int main() {
	int a,b,c;
    cin >> a;
    while(a!=0){
        cin >> b;
        cin >> c;
        int result = sqrt(a*b/(1.0*c/100));
        cout << result << endl;
        cin >> a;
    }
}

Solução alternativa em C++:

Aqui a solução é a mesma do código em C, mudando apenas que utilizei iostream, então li os valores com cin e imprimi na tela com cout.

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int a, b, c;
    
    while (1) {
        
        cin >> a;
        if (a == 0)
            break;
        
        cin >> b >> c;
    
        cout << (int) sqrt(a * b * 100 / c) << 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