Удалить из массива все одинаковые вхождения элементов, оставив их по одному - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д