Informatică, întrebare adresată de MădălinaSpiridon, 9 ani în urmă

Cerința
Se dau n - 1 numere naturale distincte de la 1 la n. Să se gaseasca numărul lipsă.

Date de intrare
Fișierul de intrare lipsa.in conține pe prima linie numărul n, iar pe a doua linie n - 1 numere naturale separate prin spații.

Date de ieșire
Fișierul de ieșire lipsa.out va conține pe prima linie numărul căutat.

Restricții și precizări
2 ≤ n ≤ 1.000.000



Exemplu
lipsa.in

5
5 3 1 2
lipsa.out

4

Am rezolvat problema dar am obtinut 60 pct din cauza erorii Caught fatal signal 11.Cum o pot rezolva?
#include

using namespace std;
ifstream fin("lipsa.in");
ofstream fout("lipsa.out");
int i,n,a,j,fr[100005];
int main()
{fin>>n;
for(i=1;i<=n-1;i++){
fin>>a;
fr[a]=1;}
for(i=1;i<=n;i++)
if(fr[i]==0)

fout << i;
return 0;
}


artur99: Ești sigură că a-ul e tot timpul mai mic decât 100005?
MădălinaSpiridon: a -ul poate fi cel mult egal cu n
artur99: Aa, păi vectorul tău are 100 de mii de poziții, iar dacă a poate ajunge până la n, atunci dacă a ar fi 1 milion, cum ai mai putea face fr[a]?
artur99: Ai putea să dai 1 milion de poziții la vector, dar trebuie să îl faci char(să folosească doar 1 byte, și să pui 1 sau 0 în el), că dacă e int folosește 4. Și așa, cu char, 1 milion de poziții în vector ar avea undeva aproape de 1MB, deci cred că ar fi ok

Răspunsuri la întrebare

Răspuns de Gillga
0
primesti acea eroare deoarece iese din vector, problema spune pana-ntr-un milion (1000000), pe cand vectorul tau e de 100 de mii (100005). vectorul mai mare si nu mai prinesti acea problema ; de asemenea pwntru ca tu folosesti variabila fr doar pentru 1 respectiv 0 ( true /false ) ti-as recomanda bool, acesta este un tip de date special pentru asemenea situatii te ajura la memorie deoarece un int ocupa 16/32 de biti, pe cand un bool doar 1 bit.


sper ca te ajuta; daca mai ai intrebari, nu ezita sa-ntrebi; bafta. :)

artur99: Bool-ul cred că are tot 8 biți, pentru că atâta timp cât poate avea un pointer la el, e pe un byte în memorie...
Gillga: da, asta asa e , are 8 biti; ( provesorul nu poate folosii nimic sub 8 biti/ 1 byte) . My bad, sorry ^-^
Gillga: procesorul*
artur99: (y) :D
artur99: Dar tot mai bună ideea ta cu bool-ul decât cu char-ul :))
Gillga: thank you ^-^y
Alte întrebări interesante