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
Was this helpful?