Pesquisar este blog

Livros Recomendados

sexta-feira, 5 de março de 2021

URI (BEECROWD) - 2162 - Picos e Vales - Iniciante - C e C++

Picos e Vales, exercício iniciante que solucionei e postei os códigos aqui! Confira!

Plataforma: URI (BEECROWD)

Problema2162

Enunciado:

Ao observar a paisagem da Nlogônia, o professor MC percebeu que a cada intervalo de 100 metros existe um pico. E que exatamente na metade de dois picos há um vale. Logo, a cada 50 metros há um vale ou um pico e, ao longo da paisagem, não há um pico seguido por outro pico, nem um vale seguido por outro vale.

O professor MC ficou curioso com esse padrão e quer saber se, ao medir outras paisagens, isso se repete. Sua tarefa é, dada uma paisagem, indicar se ela possui esse padrão ou não.

Linguagens: C e C++


Solução:

Após ler os valores, utilizei uma função menor para saber se o número era maior ou menor, assim saberia o sinal (positivo ou negativo). A condição menor(valores[indice], valores[indice+1]) != sinal era importante para verificar se havia pico ou vale, alterando o valor da variável resposta para zero e interrompendo o laço. Caso contrário o valor final já seria 1, valor inicialmente atribuído à variável resposta. A mudança de sinal foi feita depois com sinal *= -1, pois assim, se o número é positivo ele passa a ser negativo, se ele era negativo, passa a ser positivo.

Código em C:

#include <stdio.h>
int menor(int a, int b) {
    if (a > b)
        return 1;
    if (b > a)
        return -1;
    return 0;
}
int main() {
    
    int n, indice = 0, sinal, resposta = 1;
    scanf("%i", &n);
    int valores[n];
    
    while (indice < n)
        scanf("%i", &valores[indice++]);
    
    indice = 0;
    
    sinal = menor(valores[0], valores[1]);
    
    if (sinal) {
    
        while (indice < n-1) {

            if (menor(valores[indice], valores[indice+1]) != sinal) {
                resposta = 0;
                break;
            }
            
            sinal *= -1;
            indice++;
        }
        printf("%i\n", resposta);
    }
    else
        printf("0\n");
    
    

    return 0;
}

Código em C++:

#include <iostream>

using namespace std;

int menor(int a, int b) {
    if (a > b)
        return 1;
        
    if (b > a)
        return -1;
        
    return 0;
}

int main() {
    
    int n, indice = 0, sinal, resposta = 1;
    cin >> n;
    int valores[n];
    
    while (indice < n)
        cin >> valores[indice++];
    
    indice = 0;
    
    sinal = menor(valores[0], valores[1]);
    
    if (sinal) {
    
        while (indice < n-1) {

            if (menor(valores[indice], valores[indice+1]) != sinal) {
                resposta = 0;
                break;
            }
            
            sinal *= -1;
            indice++;
        }
        cout << resposta << endl;
    }
    else
        cout << "0" << 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