Solução Informática - Nível Iniciante - Semana 5

Solução por Anita Ramos

Este problema utiliza apenas os comandos mais simples de programação, mas envolve algumas ideias essenciais para resoluções de outras questões, como a de enumerar o teste de cada resposta e a de salvar o valor de saída anterior ao que se refere um loop do comando for().

Iniciando a programação então, após adicionar as bibliotecas e declarar as variáveis, o programa lê o primeiro valor de entrada N e estabelece um loop com o comando while() enquanto o N for diferente de 0, ou seja, até os casos de testes se encerrarem. Dentro desse loop temos um outro comando de repetição, o for() para ler e imprimir os resultados de cada teste. Assim, dentro dele analisamos todos os pares (J,Z), um por um, para cada caso de teste N. Então primeiro lemos o par, calculamos a diferença deles (J-Z) e, se for o primeiro par (J,Z) de um caso de teste (ou seja, i=0), imprimimos antes o número do teste (ex: Teste 1) e depois o valor da primeira diferença dif, senão, imprimimos o valor do lastdif (dif anterior) + dif (atual). Por fim, o lastdif assume o valor do novo dif que foi impresso. Ao acabar esse loop, ou seja, esse caso de teste, uma linha em branco é impressa, o programa lê o novo N, zera a variável lastdif para não interferir no próximo caso e soma-se 1 à variável teste para enumerar o próximo caso.

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


#include<bits/stdc++.h> //biblioteca utilizada
int main()
{
int N,i,teste=1,J,Z,dif,lastdif; //declaração das variáveis que compõe
scanf("%d", &N); //lê o primeiro "N"
while(N!=0) //enquanto a leitura do "N" não for 0 (encerra o programa), o programa fica preso neste loop
{
for(i=0; i<N; i++) //função para ler todos os pares J e Z seguintes
{
scanf("%d %d", &J, &Z); //lê um par J e Z
dif=J-Z; //dif assume o valor da diferença de J e Z
if(i==0) //se i for 0, ou seja, se for o primeiro par (J,Z) de um caso de teste
{
printf("Teste %d\n", teste); //imprimi o número do teste
printf("%d\n", dif); //imprimi o valor da primeira diferança dif
}
else //senão
{
dif+=lastdif; //soma-se o valor do lastdif ao dif atual
printf("%d\n", dif); //imprimi o novo valor do dif
}
lastdif=dif; //lastdif assume o valor do novo dif
}
printf("\n"); //imprime uma linha em branco para separar os testes
scanf("%d", &N); //lê o novo "N" (próximo caso de teste)
lastdif=0; //zera a variável lastdif para o próximo caso
teste++; //soma-se 1 na variável teste para contabilizar mais um teste
}
return 0; //retorna a 0
}