Comentário NOIC OBI 2017 - Fase 2 - Programação Nível Júnior

Comentário por João Guilherme

Jogo de Cartas

Conhecimento prévio necessário:

  1. Entrada e saída (Aula 1)
  2. Estruturas condicionais e repetição (Aula 2)

Primeiro lemos a entrada, gravando os números em 3 variáveis, a, b e c. Então usando ifs e elses imprimimos o número que não se repetiu:

  • Se a == b, imprimimos c;
  • Se a == c, imprimimos b;
  • Se c == b, imprimimos a.

Segue o código para melhor entendimento.


#include<bits/stdc++.h>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b >> c;
if(a == b) cout << c << "\n";
else if(a == c) cout << b << "\n";
else cout << a << "\n";
return 0;
}

view raw

cartaspjf2.cpp

hosted with ❤ by GitHub

 

Montanha

Conhecimento prévio necessário:

  1. Entrada e saída (Aula 1)
  2. Estruturas condicionais e repetição (Aula 2)

Primeiro lemos o n, em seguida usamos um for para armazenarmos os números. Usaremo um vetor v de tamanho 1024, sendo assim maior que on máximo. Uma vez tendo lido todas as variáveis, usamos outro  for, indo de 2 até n - 1 checamos para cada elemento v[i] do vetor se v[i - 1]  data-recalc-dims= v[i] < v[i + 1]" />. Se isso ocorrer alguma vez, imprimimos S e terminamos o programa, porém se o loop terminar imprimimos N.


#include <bits/stdc++.h>
using namespace std;
int v[1024];
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> v[i];
}
for(int i = 2; i <= n - 1; ++i){
if(v[i] < v[i - 1] && v[i] < v[i + 1]){
printf("S\n");
return 0;
}
}
printf("N\n");
return 0;
}

view raw

montanha.cpp

hosted with ❤ by GitHub

 

Jogo de Tabuleiro

Conhecimento prévio necessário:

  1. Entrada e saída (Aula 1)
  2. Estruturas condicionais e repetição (Aula 2)

Primeiro lemos o n, em seguida usamos dois for, um dentro do outro para lermos as cores das pedras no tabuleiro. Usaremo uma matriz mat de tamanho 128 por 128, tendo portanto dimensões maiores que on máximo. A seguir usamos dois for para preencher a tabela, ambos começando do 2 e indo até o n. Em cada célula da matriz analisamos as células: acima, a logo abaixo e a na diagonal, se a soma delas for maior que 1, então existem mais pretas que brancas e sua cor será branca, ja se a soma for menor ou igual a 1 existem mais brancas que pretas e a celula deve ser preta.

Segue o código para melhor entendimento


#include<bits/stdc++.h>
using namespace std;
int mat[128][128];
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
cin >> mat[i][j];
for(int i = 2; i <= n; ++i)
for(int j = 2; j <= n; ++j){
if(mat[i - 1][j] + mat[i][j - 1] + mat[i - 1][j - 1] > 1) mat[i][j] = 0;
else mat[i][j] = 1;
}
cout << mat[n][n] << "\n";
return 0;
}

view raw

jogop1f2.cpp

hosted with ❤ by GitHub