Muitas crianças gostam de decidir todas as disputas através do famoso jogo de Par ou Ímpar. Nesse jogo, um dos participantes escolhe Par e o outro Ímpar. Após a escolha, os dois jogadores mostram, simultaneamente, uma certa quantidade de dedos de uma das mãos. Se a soma dos dedos das mãos dos dois jogadores for par, vence o jogador que escolheu Par inicialmente, caso contrário vence o que escolheu Ímpar.
Dada uma sequência de informações sobre partidas de Par ou Ímpar (nomes dos jogadores e números que os jogadores escolheram), você deve escrever um programa para indicar o vencedor de cada uma das partidas.
Entrada
A entrada é composta de vários conjuntos de testes. A primeira linha de um conjunto de testes contém um inteiro N (0 ≤ N ≤ 1000), que indica o número de partidas de Par ou Ímpar que aconteceram. As duas linhas seguintes contêm cada uma um nome de jogador. Um nome de jogador é uma cadeia de no mínimo um e no máximo dez letras (maiúsculas e minúsculas), sem espaços em branco. As N linhas seguintes contêm cada uma dois inteiros A e B que representam o número de dedos que cada jogador mostrou em cada partida (0 ≤ A ≤ 5 e 0 ≤ B ≤ 5). Em todas as partidas, o primeiro jogador sempre escolhe Par. O final da entrada é indicado por N = 0.
Saída
Para cada conjunto de teste da entrada, seu programa deve produzir a saída da seguinte forma. A primeira linha deve conter um identificador do conjunto de teste, no formato “Teste n”, onde n é numerado sequencialmente a partir de 1. As próximas N linhas devem indicar o nome do vencedor de cada partida. A próxima linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.
Exemplo
Entrada | Saída |
3 Pedro Paulo 2 4 3 5 1 0 2 Claudio Carlos 1 5 2 3 0 |
Teste 1 Pedro Pedro Paulo
Teste 2 |
Solução em C
#include <stdio.h>
int main() {
int partidas, i, cont, instancia = 0;
int a, b, soma;
scanf("%i", &partidas);
while (partidas != 0){
cont=0;
char jog1[11], jog2[11];
int ganhador[1000]; //0 ≤ N ≤ 1000
scanf("%s %s", jog1, jog2);
for(i = 0; i < partidas; i++) {
//faz a disputa
scanf("%i %i", &a, &b);
soma = a + b;
//verifica quem ganhou
if (soma % 2 == 0) {
ganhador[cont] = 1;
} else {
ganhador[cont] = 2;
}
cont++;
}
instancia++;
printf("Teste %i\n", instancia);
//mostra o nome de quem ganhou cada disputa
for(i = 0; i < cont; i++) {
if (ganhador[i] == 1) {
printf("%s\n", jog1);
} else {
printf("%s\n", jog2);
}
}
printf("\n");
//lê uma nova quantidade de disputas
scanf("%i", &partidas);
}
return 0;
}
Teste o código: http://ideone.com/5uhC1L
Solução em C++
Apenas para dar uma diferenciada com relação a solução em C, foi utilizada a classe vector em vez de um array primitivo (o vetor). Também foi utilizado o desvio condicional ternário em vez do if, mas o funcionamento é o mesmo.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int partidas, instancia = 0;
int a, b, soma;
cin >> partidas;
while (partidas != 0) {
char jog1[11], jog2[11];
cin >> jog1 >> jog2;
vector<int> ganhador;
for(int i = 0; i < partidas; i++) {
cin >> a >> b;
soma = a + b;
ganhador.push_back((soma % 2 == 0) ? 1 : 2); //operador if ternário
}
instancia++;
cout << "Teste " << instancia << endl;
for(int i = 0; i < ganhador.size(); i++) {
printf("%s\n", (ganhador.at(i) == 1) ? jog1 : jog2);
}
cout << "\n";
cin >> partidas;
}
return 0;
}
Teste o código: http://ideone.com/klIyMg