Simulado OBI 2023 – Fase 1 – Programação Nível Júnior
Se você quiser se preparar para a OBI, não deixe de conferir o Roteiro de estudos de informática, e também a página de informática do NOIC, com todos nossos materiais.
Para conferir a prova na íntegra, clique aqui.
Trio de Nerds
Comentário escrito por Vitor Veiga
Conhecimento prévio necessário:
O problema nos dá 3 strings, que representam os instrumentos tocados por Luca, Leo e Lúcio, e quer saber essas strings são “violao”, “piano” e “bateria”, em qualquer ordem.
Nossa estratégia de resolução será declarar 3 variáveis booleanas $$(v, p, b)$$, que começam sendo falsas. Enquanto lemos a entrada, checar se cada uma das strings de entrada representa alguma das strings alvo. Caso representem, marcamos como verdadeira a booleana do respectivo instrumento.
Se no final todas as booleanas estiverem marcadas, todos os instrumentos estão presentes e retornamos “S”. Caso contrário, retornamos “N”.
Outra maneira de resolver é ler as 3 strings em $$s1,s2 e s3$$ e chegar se elas são todas diferentes entre si, ou seja, $$s1 != s2$$, $$s1 != s3$$ e $$s2 != s3$$.
Clique aqui para conferir o código
Gatinhos Explosivos
Comentário escrito por Estela Baron
Conhecimento prévio necessário:
Basicamente, se houver alguma carta de desarme – se algum inteiro da entrada for igual a 1 – temos que analisar dois casos: se o primeiro inteiro for 1, basta imprimir 3, pois quer dizer que a primeira carta é o desarme. Caso contrário, precisamos embaralhar, ou seja, temos que imprimir 1.
Se não houver nenhum desarme, temos que analisar somente a primeira carta. Se for uma bomba, temos que pular a vez (imprimir 2). Caso contrário, quer dizer que a primeira carta nos dá um outro poder, ou seja, podemos comprar a do topo (imprimir 3).
Com isso, conseguimos verificar todas as possibilidades. É importante notar a ordem de importância das condições: verificar se tem algum desarme deve ser prioridade. Para implementar o código, declaramos três inteiros e atribuímos os valores a eles (por meio do $$cin$$). Além disso, é necessário usar as estruturas de $$if$$ e $$else$$ para analisar os casos.
Observação: para que não haja o risco de imprimir duas respostas, é importante utilizar $$else\; if$$. Se a condição dentro dessa estrutura for atendida, os comandos são realizados e o programa não verifica as outras condições ( os outros $$else \;if$$ e o $$else$$).
Clique aqui para conferir o código
Atacante Devedor
Comentário escrito por Arthur Lobo
Conhecimento prévio necessário:
Sabemos quantos reais foi emprestado para cada amigo e quantos reais cada amigo nos emprestou, e nosso objetivo é saber o quanto nós temos que pagar os amigos para quitar a dívida, e quantos nossos amigos tem que nos pagar para que a dívida deles seja quitada.Primeiramente, começamos com duas variáveis $$res1 = 0$$, representando quanto Leonardo deve pagar, e $$res2 = 0$$, representando quando ele pagará.
Em seguida, faremos um for com $$i$$ de $$1$$ até $$N$$ e, para cada $$i$$, analisaremos 3 casos:
- $$A_i > B_i$$: Isso significa que o atacante emprestou mais dinheiro para o amigo do que o amigo para ele, então o quanto ele recebe aumenta em $$A_i-B_i \rightarrow res1+= A_i-B_i$$.
- $$A_i < B_i$$: Isso significa que o atacante emprestou menos dinheiro para o amigo do que o amigo para ele, então o quanto ele paga aumenta em $$B_i-A_i \rightarrow res2+= B_i-A_i$$.
- $$A_i = B_i$$: Nada acontece.
No fim, basta imprimir o valor de $$res1$$ e $$res2$$.
