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
ou
. Por exemplo, se colocarmos
, queremos dizer que o primeiro valor na entrada vai ser atribuído a uma variável cujo nome é
- 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').