Solução Crescimento Populacional

Solução por Rogério Júnior

O problema quer apenas que eu verifique quando a população de A ultrapassará a de B apenas para o primeiros 100 anos. Logo, posso olhar, ano por ano, a população das duas cidades e verificar se a população de A está maior. Para cada caso de teste, vou fazer um for que irá de 1 a 100, representando a passagem dos anos. Para cada repetição do loop, adicionarei à população de cada cidade o valor de \lfloor{\frac{P}{100}\times{G}}\rfloor, que será o aumento populacional do ano. Se acabar o for e a população de A ainda for menor que a de B, devemos imprimir "Mais de 1 seculo.". Perceba que as populações das cidades podem passar da casa dos bilhões, logo, usaremos long long int ao invés de int para guardar estes valores. Vamos ao código:


#include <cstdio> // printf e scanf
int main(){
// declaração de variáveis
int t;
long long int pa, pb;
double g1, g2;
scanf("%d", &t); // leio o número de casos de teste
for(int i=1; i<=t; i++){ // para cada caso de teste
scanf("%lld %lld %lf %lf", &pa, &pb, &g1, &g2); // leio os valores de pa, pb, g1 e g2
for(int ano=1; ano<=100; ano++){ // para cada ano que passa
//atualizo as populações das cidades
pa+=(g1/100)*pa;
pb+=(g2/100)*pb;
if(pa>pb){ // se a populaçao de A for maior que a de B
printf("%d anos.\n", ano); // imprimo o ano em que estou
break; // paro o loop
}
}
// se após os 100 anos a população de A ainda não superar a de B, imprimo "Mais de 1 seculo."
if(pa<=pb) printf("Mais de 1 seculo.\n");
}
return 0;
}

view raw

crescimento.cpp

hosted with ❤ by GitHub

Nosso leitor Roger Benet também apresentou uma solução correta em java:


import java.io.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
int testes,tempo = 0,i;
long populacaoA, populacaoB;
double percentualA, percentualB;
String[] aux;
testes = Integer.parseInt(in.readLine());
for (i = 1 ; i <= testes; i++){
aux = in.readLine().split(" ");
populacaoA = Long.parseLong(aux[0]);
populacaoB = Long.parseLong(aux[1]);
percentualA = Double.parseDouble(aux[2]);
percentualB = Double.parseDouble(aux[3]);
while (populacaoA <= populacaoB){
populacaoA += (long) (populacaoA * (percentualA/100));
populacaoB += (long) (populacaoB * (percentualB/100));
tempo++;
if (tempo > 100)break;
}
if (tempo <= 100)out.write(tempo+" anos.\n");
if (tempo > 100)out.write("Mais de 1 seculo.\n");
tempo = 0;
}
out.flush();
}
}