Picos e Vales, exercício iniciante que solucionei e postei os códigos aqui! Confira!
Plataforma: URI (BEECROWD)
Problema: 2162
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; }
#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