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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
 
//наивный алгоритм O(n^2)
int* unique_del(int* f, int *l){
    int t, *p;
    for(; f != l; ++f){
        p = f + 1;
        while(p < l){
            if(*p == *f){
                t        = *(l - 1);
                *(l - 1) = *p;
                *p       = t;
                --p;
                --l;
            }
            ++p;
        }
    }
    return l;
}
 
 
int main(void){
    int* p, *e;
 
    int  A[] = { 1, 2, 2, 3, 1, 3, 4, 1, 3, 3, 5, 4, 6, 5 };
 
    e = unique_del(A, A + sizeof(A)/sizeof(A[0]));
    for(p = &A[0]; p != e; ++p)
        printf("%d ", *p);
    return 0;
}

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


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

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

11   голосов , оценка 4 из 5
Похожие ответы