Pesquisar este blog

Livros Recomendados

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

sábado, 20 de março de 2021

URI (BEECROWD) - 2808 - Mais Cavalos - Iniciante - C e C++

Mais Cavalos! Esse é o nome do exercício resolvido e cuja resposta apresento aqui.  Espero que consigam compreender a resposta!

Plataforma: URI (BEECROWD)

Problema2808


Linguagens: C e C++


Solução:

Esse exercício eu fiz de algumas formas diferentes, mas todas elas utilizam o mesmo raciocínio. Basta ler os quatro valores e testar a diferença absoluta entre as linhas e as colunas, verificando as condições:

  • abs (col - colDest) = 2 E abs(line - lineDest) = 1;
  • OU
  • abs (col - colDest) = 1 E abs(line - lineDest) = 2;
Se a condição for satisfeita é válido, se não for é inválido.
Para utilizar abs, a função que calcula o valor absoluto, foi necessário acrescentar a biblioteca matemática (math.h em C e cmath em C++). Aliás, só fiz isso por praticidade, porque também era possível -- e fácil! -- ter criado essa função manualmente, não é verdade?

Código em C:

Essa solução aqui nem é a melhor, foi só pra mostrar um jeito um pouco diferente de resolver. Podia ter eliminado um IF e uma variável. E você, como resolveu esse exercício em C?

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

int main() {
    int line, lineDest, flag = 1;
    char col, colDest;
    
    scanf("%c%i %c%i", &col, &line, &colDest, &lineDest);

    if ((abs(col-colDest) == 2 && abs(line-lineDest) == 1) || (abs(col-colDest) == 1 && abs(line-lineDest) == 2))
        flag = 0;
    if (flag)
        printf("IN");
        
    printf("VALIDO\n");
    
    return 0;
}


Código em C++:

Solução com lógica semelhante a que apresentei em C, mas sem o uso da flag.

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int line, lineDest;
    char col, colDest;
    
    cin >> col >> line >> colDest >> lineDest;

    if ((abs(col-colDest) == 2 && abs(line-lineDest) == 1) || (abs(col-colDest) == 1 && abs(line-lineDest) == 2))
        cout << "VALIDO" << endl;
    
    else
        cout << "INVALIDO" << 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