[C++] Usuwanie duplikatów

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

[C++] Usuwanie duplikatów

Post autor: Luminofor » 08 kwie 2009, 21:41

Dla niektórych konfiguracji liczb nie działa poprawnie, np dla n= 11 i liczb 32,3,2,5,2,4,2,3,12,2,2
Ma ktoś jakiś pomysł, dlaczego? Z góry dzięki za pomoc.

Kod: Zaznacz cały

#include <iostream>

using namespace std;

int main()
{
	long int tablica[100];
	int n,e=0,licznik=0;
	cout << "Ile liczb? ";
	cin >> n;
	int ile=0;
	for(int i=0; i<n; i++)
	{
		cout << "Podaj liczbe numer " << i+1 << ": ";
		cin >> e;
		tablica[i]=e;
	}

	cout << endl << "Tablica przed usunieciem duplikatow: ";
	for(int j=0; j<n; j++)
	{
		cout << tablica[j] << ",";
	}
	cout << endl;
	for(int k=0; k<n; k++)
	{
		for(int l=0; l<n; l++)
		{
			if((tablica[k]==tablica[l]) && (l<=n) && (k!=l))
			{
				tablica[k]=tablica[k-1];
				licznik++;
			}
		}
	}
	cout << endl << "Tablica po usunieciu duplikatow: ";
	for(int o=licznik; o<n; o++)
	{
		cout << tablica[o] << ",";
	}
	cout << endl;
	return 0;
}


[ Dodano: 2009-04-08, 23:33 ]
Udało mi się zrobić ale dla elementów niezerowych:

Kod: Zaznacz cały

#include <iostream>

using namespace std;

int main()
{
	long int tablica[100];
	int n,e=0,licznik=0;
	cout << "Ile liczb? ";
	cin >> n;
	int ile=0;
	for(int i=0; i<n; i++)
	{
		cout << "Podaj liczbe numer " << i+1 << ": ";
		cin >> e;
		tablica[i]=e;
	}

	cout << endl << "Tablica przed usunieciem duplikatow: ";
	for(int j=0; j<n; j++)
	{
		cout << tablica[j] << ",";
	}
	cout << endl;
	for(int k=0; k<n; k++)
	{
		for(int l=0; l<n; l++)
		{
			if((tablica[k]==tablica[l]) && (l<=n) && (k!=l))
			{
				tablica[k]=0;
				licznik++;
			}
		}
	}
	cout << endl << "Tablica po usunieciu duplikatow: ";
	for(int o=0; o<n; o++)
	{
		if(tablica[o]!=0)
		cout << tablica[o] << ",";
	}
	cout << endl;
	return 0;
}


[ Dodano: 2009-04-08, 23:58 ]
Ok już mam, zastosowałem swoją metodę z tablicą pomocniczą :)

Kod: Zaznacz cały

#include <iostream>

using namespace std;

int main()
{
	long int tablica[100], duplikaty[100];
	int n,e=0;
	cout << "Ile liczb? ";
	cin >> n;
	int ile=0;
	for(int i=0; i<n; i++)
	{
		cout << "Podaj liczbe numer " << i+1 << ": ";
		cin >> e;
		tablica[i]=e;
	}
	cout << endl << "Tablica przed usunieciem duplikatow: ";
	for(int j=0; j<n; j++)
	{
		cout << tablica[j] << ",";
	}
	cout << endl;
	for(int k=0; k<n; k++)
	{
		for(int l=k; l<n; l++)
		{
			if((tablica[k]==tablica[l]) && (l<=n) && (k!=l))
			{
				if(tablica[k]==tablica[l]) 
				{
					duplikaty[k]=0;
				}
			}
		}
	}
	cout << endl << "Tablica po usunieciu duplikatow: ";
	for(int o=0; o<n; o++)
	{
		if(duplikaty[o]!=0)
		cout << tablica[o] << ",";
	}
	cout << endl;
	system("pause");
	return 0;
}

ODPOWIEDZ