Solução Crescimento Populacional

por

Solução de Pedro Michael, comentários de Rogério Júnior

Clique aqui para ver a questão original.

A abordagem mais simples é a simulação. Para cada caso da entrada, simularemos o passar dos anos até que a população de $$A$$ ultrapasse a de $$B$$. Se passarmos dos $$100$$ anos, basta imprimirmos “mais de 1 seculo.”.

Primeiramente vamos ler o número de casos da entrada, salvá-lo em $$t$$ e usar um $$for$$ para repetirmos o algoritmo $$t$$ vezes. Em cada iteração do $$for$$ simularemos o crescimento das cidades apresentadas da seguinte forma: leremos os valores de $$PA, PB, G1$$ e $$ G2$$ e usaremos uma variável $$anos$$ de valor inicial $$0$$ para controlarmos a passagem do tempo. Usaremos um $$while$$ para simular cada ano. Logicamente, ele só deve se repetir enquanto $$PA \leq PB$$ e $$anos \leq 100$$. Em cada iteração dele, aumentaremos  o valor de $$anos$$ em uma unidade (pois estamos simulando a passagem de 1 ano) e simularemos o crescimento de cada população, aumentando os valores esperados em $$PA$$ e $$PB$$ (em $$PA$$ aumentamos $$\frac{PA \times G1 }{100}$$ e em $$PB$$ aumentamos $$\frac{PB \times G2 }{100}$$.

Quando o $$while$$ terminar, basta vermos quantos anos se passaram. Se $$anos >100$$ então imprimimos uma linha com a frase “mais de 1 seculo.”. Caso contrário, imprimimos a frase “$$x$$ anos.”, onde $$x$$ é o valor da variável $$anos$$. Segue o código comentado para melhor entendimento.


#include <cstdio> // scanf e printf
int main(){
// declaro as variáveis que vou usar
int t, PA, PB, anos;
double G1, G2;
// leio o número de casos de teste
scanf("%d", &t);
// repito o algoritmo t vezes
for(int i=0; i<t; i++){
// zero o valor de anos
anos = 0;
// leio os valores de PA, PB, G1 e G2
scanf("%d %d %lf %lf", &PA, &PB, &G1, &G2);
// simulo a passagem dos anos enquanto PA não superar PB
// e não houver passado mais de 100 anos
while(PA <= PB && anos <= 100){
// para cada ano simulado
// aumento uma unidade no valor de anos
anos++;
// e simulo o crescimento das duas cidades
PA+= PA * G1/100;
PB+= PB * G2/100;
}
// quando o while acabar
// se tiver passado mais de 100 anos, imprimo "mais de 1 seculo."
if(anos > 100) printf("Mais de 1 seculo.\n");
// caso contrário, imprimo quantos anos passaram, como a questão pede
else printf("%d anos.\n", anos);
}
return 0;
}

view raw

crescimento.cpp

hosted with ❤ by GitHub


Comentários

Comente