C++ В массив A длиной N из всех одинаковых элементов оставьте только по одному...

0 голосов
18 просмотров

C++
В массив A длиной N из всех одинаковых элементов оставьте только по одному представителю.
Остальные удалите. Рассмотрите 2 варианта:
а) массив упорядочен
б) не упорядочен


Информатика (21 баллов) | 18 просмотров
Дан 1 ответ
0 голосов

//массив отсортировать, удалить повторные
#include
#include
#include
 #include
 #include
using namespace std;

  int main()  { 

    int j,n;
    list lst;
    list::iterator it1;
// начальная установка генератора случ. чисел
    srand(time(NULL));
//заполнение списка 
    cout<<"n = ";  cin>>n;
    for (j=0; j      lst.push_back(rand() % 10);
//вывод на экран
      cout<<"initial array:  ";<br>      for (it1=lst.begin(); it1!=lst.end(); it1++)
      cout<<*it1<<" ";<br>//сортировка, удаление повторных
      lst.sort();
      lst.unique();
//вывод списка
      cout<<endl<<"after removing:  ";<br>      for (it1=lst.begin(); it1!=lst.end(); it1++)
      cout<<*it1<<" ";<br>      cout<<endl;<br>
      system("pause");
      return 0;
  } 

В варианте без сортировки (что, вообще говоря, не принципиально) убираете строку  lst.sort();   

(9.7k баллов)
0

К сожалению, lst.unigue()  работает только для сортированного списка, для не сортированного будет по другому         //удаление повторных без сортировки
    it1=lst.begin();  j=*it1;  it2=it1;  
    for (it1=it2; it1!=lst.end(); it1++)
    {
      j=*it1;  it2=it1;  it2++;
      while (it2!=lst.end())
      {  if (*it2==j)  *it2=-1;   it2++;  }
      lst.remove(-1);
    }