Informatică, întrebare adresată de juny, 8 ani în urmă

Problema 2734 de pe pbinfo

Se citește un șir cu n elemente, numere întregi. Să se șteargă elementele care se repetă, păstrându-se doar primul de la stânga la dreapta.

Imi da doar 50 de puncte si imi spune Caught fatal signal 11

#include

using namespace std;

int main()
{
int n, i, v[1000], f[1000]={0};
cin >> n;
for ( i=1;i<=n;i++ )
{
cin >> v[i];
f[v[i]]++;
if ( f[v[i]]!=1 && f[v[i]]!=0 )
{i--;n--;}
}
for ( i=1;i<=n;i++ )
cout << v[i] << " ";
return 0;
}


boiustef: numerele care se citesc sunt întregi şi nu naturale. în caz că sunt negative cum completezi vectorul de frecvenţă????
1 ≤ n ≤ 1000
valoarea absolută a elementelor șirului va fi mai mică decât 1.000.000.000
cu aşa valori a elementelor cum completezi vectorul de frecvenţă declasat numai cu 1000 de elemente?
boiustef: declarat...
boiustef: evident că pot apărea erori de alocare a memoriei
boiustef: vectorul de frecvenţă nu e efectiv aici...
juny: aaa, ok mersi

Răspunsuri la întrebare

Răspuns de boiustef
4

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int n, num, i, j, v[1000], k=0, repeta;

   cin >> n;

   cin >> num;

   v[k++]=num;

   for (i=1; i<n; ++i)

   {

       cin >> num;

       repeta=0;

       for (j=0; j<k; ++j)

       {

           if (num==v[j])

           {

               repeta=1;

               break;

           }

       }

       if (!repeta) v[k++]=num;

   }

   for (i=0; i<k; ++i)

       cout << v[i] << " ";

}

Explicație:

un singur vector care se completează la citirea datelor cu numere ce nu se conţin în vectorul ce se completează

Răspuns de xmrkertesx
5

Răspuns:

#include<iostream>

#define NMax 1000

using namespace std;

int v[NMax+1],n,i,j;

int main()

{

   cin>>n;

   for(i=1; i<=n; i++)

       cin>>v[i];///citire

   for(i=1; i<n; i++) /// accesez elementele vectorului pana la penultimul

       for(j=i+1; j<=n; j++) ///caut un element = v[i]

           if(v[i]==v[j]) ///daca am mai gasit un element = v[i]

           {

               for(int k=j+1; k<=n; k++)

                   v[k-1]=v[k]; ///sterg elementul

               n--,j--;

           }

   for(i=1; i<=n; i++)

       cout<<v[i]<<" ";

   return 0;

}

Explicație:

Daca citirea o faci incepand cu 1 numarul de elemente ale vectorului trebuie sa fie crescut cu 1.Caught fatal signal 11 inseamna cand accesezi un element care nu exista in vector .de exemplu v={1,3,5,1054233,4};cand faci f[v[4]]++ adica f[105423]++ fr[105423] nu exista sau cand depasesti meoria alocata varianta ta are 2 greseli :

-solutia nu este optima in privirea memoriei;

- nu ai pus corect numarul de elemente ale vectorilor

Alte întrebări interesante