1743 - Máquina de Verificação Automatizada

Você gosta de simulação ou de lógica? De qualquer forma, vamos de lógica!

Descrição

Solução

Independente da alternativa que você escolher para resolver o problema, é importante notar que duas posições do conector só podem ser compatíveis se em uma delas tiver um plugue e em outra uma tomada. Isso é a cara do ou exclusivo, onde dá verdadeiro se um e somente um dos valores é 1.

Alternativa 1 - Simulação

Para fazer a simulação, basta representar os conectores como um vetor e depois verificar cada posição, no primeiro caso de conectores iguais pode-se descartar a pesquisa e apresentar o veredito.

#include <stdio.h>

int main(){
    int X[5], Y[5];
    int compativel;

    for(int i = 0; i < 5; ++i){
        scanf("%d", &X[i]);
    }
    for(int i = 0; i < 5; ++i){
        scanf("%d", &Y[i]);
    }

    compativel = 1;
    for(int i = 0; i < 5; ++i){
        if(X[i] == Y[i]){
            compativel = 0;
            break;
        }
    }

    printf("%c\n", compativel ? 'Y' : 'N');

    return 0;
}

Alternativa 2 - Mexer com números binários

Nessa alternativa, acreditamos ser mais interessante transformar os dois conectores em números binárias e fazer a comparação apenas uma vez, onde o objetivo é que a operação ou exclusivo dê verdadeiro nas cinco posições. Com isso, o resultado procurado é 11111, que na base 10 é igual a 31.

#include <stdio.h>

int main(){
    int X, Y, a;

    X = 0;
    for(int i = 0; i < 5; ++i){
        scanf("%d", &a);
        X *= 2;
        X += a;
    }

    Y = 0;
    for(int i = 0; i < 5; ++i){
        scanf("%d", &a);
        Y *= 2;
        Y += a;
    }

    printf("%c\n", (X ^ Y) == 31 ? 'Y' : 'N');

    return 0;
}

Last updated