Удалить из массива все одинаковые вхождения элементов, оставив их по одному - C (СИ) (72665)

Узнай цену своей работы

Формулировка задачи:

ТЗ: дан массив А(n). Удалить из массива все одинаковые вхождения элементов, оставив их по одному. Мой код удаляет все повторяющиеся элементы полностью. Помогите исправить.
Листинг программы
  1. #include<stdio.h>
  2. #include<time.h>
  3. int main(){
  4. int a[20];
  5. for (int i=0; i<5; i++){
  6. printf("a[%d]=",i);
  7. scanf("%d", &a[i]);
  8. }
  9. printf("\n");
  10. for (int i=0; i<5; i++){
  11. bool flag=true;
  12. for (int j=0; j<5; j++)
  13. if (i-j!=0 && a[i]==a[j]) flag=false;
  14. if (flag) printf("%d ",a[i]);
  15. }
  16. return 0;
  17. }

Решение задачи: «Удалить из массива все одинаковые вхождения элементов, оставив их по одному»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. //наивный алгоритм O(n^2)
  4. int* unique_del(int* f, int *l){
  5.     int t, *p;
  6.     for(; f != l; ++f){
  7.         p = f + 1;
  8.         while(p < l){
  9.             if(*p == *f){
  10.                 t        = *(l - 1);
  11.                 *(l - 1) = *p;
  12.                 *p       = t;
  13.                 --p;
  14.                 --l;
  15.             }
  16.             ++p;
  17.         }
  18.     }
  19.     return l;
  20. }
  21.  
  22.  
  23. int main(void){
  24.     int* p, *e;
  25.  
  26.     int  A[] = { 1, 2, 2, 3, 1, 3, 4, 1, 3, 3, 5, 4, 6, 5 };
  27.  
  28.     e = unique_del(A, A + sizeof(A)/sizeof(A[0]));
  29.     for(p = &A[0]; p != e; ++p)
  30.         printf("%d ", *p);
  31.     return 0;
  32. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы