Witam, chcialbym zrobic program, ktory podczas wypisywania liczb naturalnych z przedzialu {1, .... , n-1}, czyli n-liczb, przerywa wypisywanie gdy liczba sie powtorzy.
Chodzi mi bardzej o ALGORYTM, a nie o program, ktory zrobil by to jak najszybciej. na razie wymyslilem kopiowanie wartosci do listy i sprawdzanie czy kolejna nowa liczba juz zostala w niej zapisana, jezeli tak to 'break'.
Z gory dziekuje za pomoc w przyspieszeniu/uproszczeniu tego co zrobilem.
W ponizszym programie dla przykladu uzywam liczb z przedzialu od 0 do 5 generowane losowo...
///
#include <iostream>
#include <time.h>
#include <list>
using namespace std;
void main()
{
int n; //number of values
list <int> m;
list <int>::iterator mIter;
bool flag = false; //if repeated value then TRUE
cout << "Enter table size: ";
cin >> n;
int *tab = new int[n];
tab[0] = 1; //first value in the tab[]
srand((unsigned)time(NULL)); //seed for randomly generated values
for(int i=1; i<n; i++)
tab[i] = rand() % 5; //randomly values from 0 to 5
cout << "\nRandomly generated table:\n" <<endl;
for(i=0; i<n; i++)
cout << tab[i] << "\t";
cout << endl;
m.clear();
m.push_back(tab[0]);
for(i=1; i<n; i++)
{
for (mIter = m.begin(); mIter != m.end(); mIter++)
if(*mIter==tab[i])
{
if (!flag)
cout << "\nInterrupted at " << i+1 << " position (value: " << tab[i] << ")." << endl;
flag = true;
break;
}
if (!flag)
m.push_back(tab[i]);
}
cout << "\n\nTable after interruption: " << endl;
for ( mIter = m.begin(); mIter != m.end(); mIter++)
{
cout << *mIter << "\t";
}
cout << "\n\n" << endl;
system("pause");
}