Solução Informática – Nível Intermediário – Semana 9

por

Solução por Anita Ramos

Para este problema utilizaremos uma nova função que irá calcular em quantas empresas $$E$$ João vai investir. Tudo isso fora da $$int$$ $$main()$$. Esse recurso facilita na produção de um programa mais compacto, organizado e eficiente.

Iniciando a programação então, após adicionar a biblioteca, temos a função $$int$$ $$acao()$$, responsável por toda a lógica, que irá receber dois inteiros $$n$$ e $$k$$ e tem 3 possibilidades de retorno:

  • 1, se $$n \leq k$$
  • retorna a $$acao()$$ de cada metade de $$n$$ (nesse caso as metades são iguais), se $$n \geq k$$ e $$n$$ é par
  • retorna a $$acao()$$ de cada metade de $$n$$ (nesse caso as metades são diferentes ($$n/2$$) e ($$n/2 + 1$$), se $$n$$ é ímpar

Assim, a ideia consiste em realizar a função $$acao$$ várias vezes até todas as parcelas serem menores ou iguais a $$k$$. Temos o seguinte exemplo para $$n=18$$ e $$k=4$$:

18 $$=$$ 9 $$+$$ 9 ($$E=2$$) $$<=>$$

18 $$=$$ (4 $$+$$ 5) $$+$$ (4 $$+$$ 5) ($$E=4$$) $$<=>$$

18 $$=$$ (4 $$+$$ [3 $$+$$ 2]) $$+$$ (4 $$+$$ [3 $$+$$ 2]) ($$E=6$$)

Logo, $$E=6$$.

Em seguida, o programa executa apenas a $$int$$ $$main()$$ que irá ler as linhas de entrada e imprimir, a cada caso de teste, o resultado obtido na função $$acao()$$  de $$n$$ e $$k$$, enquanto eles forem diferente de 0.

Segue o código comentado para melhor compreensão da solução:

https://gist.github.com/anitainfo/a2f6fe3cff01ba0abaff1d793aa37649