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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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; | |
| } |

Comente