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