Solução por Anita Almeida
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, a de somar um novo valor a uma variável e determinar isso como a própria variável e a de que não é necessário apresentar o resultado apenas no final, mas sim durante a lógica do programa.
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 o armazena nas variáveis e . Após isso, temos a primeira verificação que checa se o programa deve encerrar ou não, ou seja, se a entrada é 0. Essa verificação é feita durante toda a lógica. Em seguida, o programa lê todos os de até e sempre soma o à variável , que seria o resultado final, por isso a função de . Depois de ler tudo, entra uma parte muito importante que é a de somar 1 na variável sempre que encerrar a leitura, definindo a que teste essa resposta pertence. Logo depois, o programa imprime o teste em que se encontra, a resposta correspondente e deixa uma linha em branco, conforme dito no enunciado (lembrando que é de extrema importância seguir o roteiro de estrutura da resposta dado). Por fim, ele lê o novo valor de , o armazena em e e zera o resultado anterior para começar um novo teste caso o não seja 0.
Apenas como observação, é importante lembrar que alguns softwares específicos, ao imprimir uma saída no programa, já a imprime conforme cada teste é encerrado. Porém, isso é característico apenas do software e não funciona igualmente quando é submetido à avaliação do problema na maioria das correções. Assim, você não deve se preocupar caso em seus testes, antes da avaliação, imprimam a resposta de acordo com a ordem dos testes e sim, se a resposta e a sua estrutura de saída estão corretas. Além disso, como uma segunda observação, é importante ressaltar que não é necessário ler qual o operador , já que se o próximo for positivo ele é somado normalmente a e se ele for negativo, por ser escrito na entrada como ele já é subtraído sem problemas, afinal, é o mesmo que .
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 m1,m2,X,cont=0,R; //declaração das variáveis que compõe | |
scanf("%d", &m1); //lê o primeiro "m" | |
m2=m1; //m2 assume o mesmo valor de m1, ou seja, o valor do primeiro "m" | |
while(m2!=0) //enquanto a leitura do "m" não for 0 (encerra o programa), o programa fica preso neste loop | |
{ | |
for(m2=m1; m2>0; m2--) //função para ler todos os "m" seguintes X | |
{ | |
scanf("%d", &X); //lê o X atual | |
R+=X; //soma X ao resultado final | |
} | |
cont++; //soma 1 no teste correspondente | |
printf("Teste %d\n%d\n\n", cont,R); //imprimi a resposta a cada teste finalizado | |
scanf("%d", &m1); //lê o novo "m" | |
m2=m1; //m2 assume o mesmo valor de m1, ou seja, o valor do novo"m" | |
R=0; //zera o resultado para iniciar um novo teste | |
} | |
return(0); //zera o programa | |
} |