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;
}
Răspunsuri la întrebare
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:
#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
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?