OBI 2023 – Fase 1 – Programação Nível Junior
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.
Chinelos
Comentário escrito por Estela Baron
Conhecimento prévio necessário:
Depois de ler o valor de
, vamos criar um vetor com pelo menos
posições – para representar a quantidade de chinelos de cada tamanho. Em seguida, é necessário utilizar um
para iterar por todos os tamanhos e ler o valor que representa a quantidade.
Após isso, o programa tem que ler o valor de
. Vamos primeiro criar uma variável de resposta para guardar quantos chinelos foram vendidos. Para percorrer os pedidos, utilizamos mais um loop de
. A cada pedido, temos que verificar se a quantidade de chinelos no estoque é maior que zero. Se for, adicionamos mais um em nossa resposta e subtraímos uma unidade do estoque daquele tamanho, ou seja,
–;. Caso não a quantidade não for maior que zero, não fazemos nada.
Ao final, basta imprimir a resposta.
Clique aqui para conferir o código.
Epidemia
Comentário escrito por Arthur Lobo
Conhecimento prévio necessário:
Vamos analisar o exemplo que o enunciado nós dá: Se começamos com 3 infectados e o fator reprodutivo é 2, ou seja,
e
, os próximos dias seriam assim:
- Dia 1: 3 infectados no dia anterior, então temos 6 novos infectados. Quantidade total de infectados:
. - Dia 2: 6 infectados no dia anterior, então temos 12 novos infectados. Quantidade total de infectados:
. - Dia 3: 12 infectados no dia anterior, então temos 24 novos infectados. Quantidade total de infectados:
. - …
Perceba que a quantidade de novos infectados em um dia depende apenas da quantidade de novos infectados no dia anterior, então podemos ir testando quantos infectados vão ter em cada dia, mantendo a quantidade de novos, e parar quando essa quantidade for maior ou igual a
.
Para isso, vamos manter duas variáveis: ‘infectados_totais‘, que começa sendo
, e ‘infectados_novos‘, que também começa sendo
.
Em seguida, fazemos um for de
até
(podemos ir só até
porque sabemos que não vão se passar mais de
dias até acabar). Dentro do for, vamos aumentar a quantidade total de infectados na quantidade de infectados no dia anterior vezes
( ‘infectados_totais+= infectados_novos*
‘, e mudar a quantidade de ‘infectados novos (‘infectados_novos = infectados_novos*
‘). Agora basta checar se a quantidade total de infectados passou de
(‘infectados_totais >=
‘), se sim, imprimimos
e terminamos o código fazendo ‘return 0‘.
Vale ressaltar que também temos que checar se a quantidade inicial já que maior do que
. Se for, imprimimos
.
Clique aqui para conferir o código
Prêmio
Comentário escrito por Estela Baron
Conhecimento prévio necessário:
Nesse problema, para obter a soma dos pontos, basta multiplicar a quantidade de pães por 1, de doces por 2 e de bolos por 3. Depois de ter salvado esse resultado, verificamos se a soma é maior ou igual a 150 – se for, imprimimos ‘B’ pulando uma linha ‘\n’-, ou se é maior ou igual a 120, ou 100, ou nada (imprimindo a letra de cada caso). Como esse problema trabalha com o básico da programação, é válido listar algumas observações:
- Em seu código, você começa declarando a biblioteca e a função
. Dentro das chaves ({}) dessa função, o código deve ser escrito. - Como a nossa entrada não é fixa, ou seja, não sabemos exatamente os valores de
, é necessário obter as informações a partir da entrada. Para isso, vamos ter que ler a entrada e atribuir cada informação a uma variável – para podermos utilizar posteriormente. Isso é feito com o comando
. Por exemplo, se colocarmos
– desde que esta seja declarada antes. - A multiplicação em C++ é realizada a partir do asterisco (*). Suponha que temos uma variável do tipo inteiro para guardar a soma inicialmente com o valor
:
. Se quisermos adicionar 9, podemos fazer assim:
. Com isso,
tem valor 9; - Para conferir se o total de pontos está entre algum intervalos, podemos utilizar as estruturas condicionais para verificar cada critério. Vale ressaltar a importância de utilizar
no decorrer do código, pois um mesmo valor pode se encaixar em dois critérios: 160 é maior que 150, mas também é maior que 120. Então se não houver uma hierarquia, podemos acabar contando duas vezes. Por isso, o
é importante, pois, quando uma condição é cumprida, o programa nem considera as outras. - Por último, precisamos imprimir a nossa resposta. Podemos utilizar o comando
ou
. Como estamos imprimindo letras, precisamos colocar entre aspas a letra e pular um linha ( '\n').
