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 é e para é . 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 a , podemos dividir em pares de soma : , totalizando pares de valor . A partir disso, determinamos a seguinte equação para achar a soma ideal para par: . Para ímpar, porém, não é possível formar pares, por exemplo. Mas outra equação pode ser determinada. Utilizemos como exemplo. Nesse caso, teremos as seguintes subdivisões: , totalizando pares e meio. Pensando sobre o resultado, é como se desse . Como armazenamos como inteiro, na verdade é e, por isso, somamos a divisão, para chegar a .
Depois, lemos a segunda linha de entrada com um loop de duração 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:
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 | |
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 | |
} |