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

Solução por Anita Ramos

Para este problema temos várias soluções possíveis. Irei apresentar a que considero mais simples, que utiliza comandos básicos e envolve mais lógica.

Iniciando a programação então, após declarar a biblioteca e as variáveis utilizadas, o programa lê a primeira linha de entrada e logo em seguida já calcula qual a soma "ideal" de todas as peças. Por exemplo, a soma ideal para N=5 é 1+2+3+4+5=15 e para N=9 é 1+2+3+4+5+6+7+8+9=45. Essa soma pode ser calculada facilmente com a ideia de "pares opostos". Por exemplo, para se calcular a soma de todos os números no intervalo de 1 a 10, podemos dividir em pares de soma 11: (1,10), (2,9), (3,8), (4,7), (6,5), totalizando 5 pares (10/2) de valor 11. A partir disso, determinamos a seguinte equação para achar a soma ideal para N par: Soma Ideal = (N+1)*(N/2). Para N ímpar, porém, não é possível formar 5 pares, por exemplo. Mas outra equação pode ser determinada. Utilizemos N=1 como exemplo. Nesse caso, teremos as seguintes subdivisões: (1,11), (2,10), (3,9), (4,8), (5,7), (6), totalizando 5 pares e meio. Pensando sobre o resultado, é como se 11/2 desse 6. Como armazenamos padrao como inteiro, 11/2 na verdade é 5 e, por isso, somamos 1 a divisão, para chegar a 6.

Depois, lemos a segunda linha de entrada com um loop de duração N-1 e a cada número lido, ele é somado a "soma real", ou seja, a soma em que falta um peça.

Por fim, fica fácil encontrar o número da peça perdida. Basta subtrair a soma ideal da soma real e imprimir o resultado.

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


#include<bits/stdc++.h> //biblioteca utilizada
using namespace std;
int main()
{
int N,num,soma=0,padrao; //definição de variáveis
scanf("%d", &N); //lê a primeira linha de entrada
if(N%2==0) padrao=(N+1)*(N/2); //se 'N' for divisível por 2 (se 'N' é par), padrão recebe o valor da soma de a1 até an (a1+a2+a3....an-1,an)
else padrao=N*(N/2 + 1); //se não é divisível ('N' é ímpar), padrão recebe o valor da soma de a1 até an (a1+a2+a3....an-1,an)
for(int i=0; i<N-1; i++) //loop para ler a segunda linha de entrada ('N'-1 vezes de repetição)
{
scanf("%d", &num); //lê um número
soma+=num; //soma-se 'num' a 'soma'
}
printf("%d", padrao-soma); //imprimi a resposta (soma ideal - soma real)
return 0; //retorna a 0
}