Błąd nie mieści się w czasie

0

Edek napisał kredą na chodniku wszystkie liczby od 1 do n w losowej kolejności. Następnie poszedł do sklepu. Po powrocie zauważył, że brakuje jednej liczby. Pomóż Edkowi i powiedz, której liczby brakuje!

Wejście

Pierwszy wiersz wejścia zawiera jedną liczbę całkowitą n (1 ≤ n ≤ 500 000), oznaczającą ilość liczb, które wypisał Edek. Kolejny wiersz zawiera n − 1 liczb całkowitych l1, l2, . . . , ln−1 (1 ≤ li ≤ n), gdzie li oznacza i-tą liczbę na chodniku (po powrocie Edka ze sklepu). Wyjście
Pierwszy i jedyny wiersz wyjścia powinien zawierać jedną liczbę całkowitą, równą wartości liczby, której brakuje na chodniku.

Przykład

Dla danych wejściowych
5
2 3 1 5

poprawnym wynikiem jest:
4

0

Napisałem coś takiego ale wyskakuje komunikat przekroczono limit czasu:
#include <iostream>

using namespace std;

int main()
{
int n,c,a=0,b=0;
cin>>n;
for (int i=1;i<=n;i++){
a=i+a;
}
for (int i=1;i<n;i++){
cin>>c;
b=c+b;
}
cout<<a-b;
}

0

Przepisz program, użyj printfa/scanfa.

1
#include <iostream>
using namespace std;

int main()
  {
   unsigned n;
   cin>>n;
   unsigned long long sum=(n*(unsigned long long)(n+1))>>1;
   for(unsigned i=0;i<n;++i)
     {
      unsigned v;
      cin>>v;
      sum-=v;
     }
   cout<<sum<<endl;
   return 0;
  }
0

Suma liczb od 1 do 500000 to 125000250000, bardzo wątpię, żeby zmieściła się w incie.

0
#include <iostream>


using namespace std;

int main()
{
    int zakres = 0;
    int tab[zakres];
    cin >> zakres;
    unsigned long int suma = (zakres * (zakres + 1))/2;
    for (int i = 0; i < zakres; i++)
    {
        cin >> tab[i];
    }
    for (int i = 0; i < zakres; i++)
    {
        suma -= tab[i];
    }
    cout <<suma << endl;
}
 

Nie wiem na co twojemu profesorowi ta tablica, ale masz. Moim zdaniem można by spokojnie wczytywać i od razu od sumy odejmować, celem przyśpieszenia programu

0

A nie możesz darować sobie odejmowania i zrobić tablice bool? ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1