Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Mr_Azriel
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 13
1

Удалить из массива все одинаковые вхождения элементов, оставив их по одному

30.06.2015, 16:41. Просмотров 928. Ответов 3
Метки нет (Все метки)

ТЗ: дан массив А(n). Удалить из массива все одинаковые вхождения элементов, оставив их по одному.
Мой код удаляет все повторяющиеся элементы полностью. Помогите исправить.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2015, 16:41
Ответы с готовыми решениями:

Удалить из массива все одинаковые вхождения элементов, оставив их по одному
ТЗ: дан массив А(n). Удалить из массива все одинаковые вхождения элементов,...

Удалить из целочисленного массива все одинаковые элементы, оставив их первое вхождение
Дан целочеслинный массив размера N. Удалите из массива все одинаковые элементы,...

Удалить из массива все элементы, значение которых в этом массиве повторяются, оставив по одному
Нужна помощь в написание кода программы:...

Удалить из массива все дубликаты элементов, оставив только первое вхождение
Дан целочисленный массив размера N. Удалитьиз массива все дубликаты элементов,...

Удалить из файла лишние пробелы, оставив по одному между словами
Добрый день. Помогите с программой. Заранее спасибо. Дан файл, содержащий...

3
tnk500
114 / 118 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
30.06.2015, 17:44 2
Mr_Azriel,
C
1
2
3
4
5
6
7
8
9
for(int i = 0; i < 5; ++i)
{
   int flag = 0;
   for(int j = 0; j < 5; ++j)
      if(a[i] == a[j])
         flag++;
   if(flag <= 1)
      printf("%d ", a[i]);
}
0
Геомеханик
788 / 595 / 937
Регистрация: 26.06.2015
Сообщений: 1,409
30.06.2015, 17:52 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот вариант набросал без дополнительной памяти, правда квадратичный, можно было использовать сортировку qsort далее просто удалить дубликаты копированием за O(n), но имхо для учёбы пойдёт.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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;
}
Результат работы кода
0
Байт
Эксперт C
18526 / 12031 / 2508
Регистрация: 24.12.2010
Сообщений: 24,302
01.07.2015, 08:08 4
C
1
2
3
4
5
for(i=0; i<5; i++) {
  for(j=0; j<i; j++)
    if (a[i]==a[j]) break;
    if (j==i) printf("%d ", a[i]);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 08:08

Удалить из массива все элементы, у которых первая и вторая цифры одинаковые
Дан массив целых чисел из n элементов, заполненный случайным образом числами из...

Удалить пары соседних элементов массива, имеющих одинаковые значения
&quot;Задан размер массива целых чисел и значения его элементов.Удалить пары...

Удалить из текстового файла все лишние пробелы, оставив между словами не более одного пробела
Дано вот такое задание: Дан текстовый файл. Удалить из него все лишние пробелы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru