Informatică, întrebare adresată de Sebytza23, 9 ani în urmă

Salutare,am o problema pe care ma chinui sa o fac de mult timp : Sa se stearga dintr-un vector toate duplicatele (Exemplu: 7 - 5,6,7,8,6,3 -> 5,7,8,3)!! Acesta este codul sursa creat de mine(nu merge,desigur!),va rog sa ma ajutati :
#include

using namespace std;

int main()
{
int v[20],i,n,g,d,p,s[20],k[20];
cout << "Cate numere utilizati:";cin>>n;
for (i = 0 ; i < n ; i++)
{
cout << "Introduceti o valoare:";cin >> v[i];
s[i] = v[i];
}
for (i = 0 ; i < n ; i++)
{
k[i]=i;
}
for (i = 0 ; i < n ; i++)
{
for (p = 0 ; p < n ; p++)
{ if (k[i] != p)
{
if (s[p] == v[i])
{
for (g = p ; g < n ; g++)
{
v[g] = v[g+1];
}
n--;
}
}
}
}
for (i = 0 ; i < n ; i++)
{
cout << v[i] << ' ';
}
}

Răspunsuri la întrebare

Răspuns de Gillga
1
sa o luam cu inceputul, as sugera sa stergi d ( nu il folosesti) si sa stergi k[20], poti sa folosesti pur si simplu 'i' pentru ca oricum k [i] = i .
De asemenea poti sa incepi for-ul doi (cel cu 'p' ) poti da lui p valoare i+1 sa scapi de verificarea if (i!=p).
Acestea sunt doar sa-l mai optimizezi putin si sa arate mai frumos ^-^.

Problema cea mai mare este ca atinci cand elimini un element din vector-ul 'v' nu ai eliminat si din 's' , vectorul cu care faci verificari, pentru ca o sa gaseasca elementele respective de fiecare data neavand vectorul modificat pentru verificare ( pe scurt adaugi si s [g] =s [g+1]; ).
Si o alta mica problema ar fii dupa n--; sa adaugi si p--; pentru ca dupa ce scoti elementul de pe pozitia 'p' se muta o pozitie mai in fata acolo fiind 'p+2' fapt ce duce la ratarea unei verificari pentru ca 'p+1' acum s-ar afla pe pozitia 'p'.

O alta chestie frumoasa ar mai fii sa adaugi la functiile de tip int sa returneze ceva , un return 0; la finalul functiei main ar da frumos ;) .
Dupa acestea ar trebuii sa mearga bine.

Daca ai intrebari nu ezita sa intrebi. :)

bafta.
Alte întrebări interesante