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 , 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:
This file contains 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> // 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; | |
} |
Nosso leitor Roger Benet também apresentou uma solução correta em java:
This file contains 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
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(); | |
} | |
} |