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').