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 o$$n$$ 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] > 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 o$$n$$ 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