Sathiya S.B. Ответов: 2

Как удалить неповторяющиеся элементы в C?


Удалите все уникальные элементы

Что я уже пробовал:

int count=0,i,j;
int counter[n];
for(i=0;i<n;i++){
counter[i]=1;

}
for(int i=0;i<n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]==a[j]){
counter[i]++;
counter[j]++;

}
}
}
for(i=0;i<n;i++){
if(counter[i]">1)

printf("%d %d ",a[i]);
}

Patrice T

В чем конкретно заключается ваша проблема ?
Мы не можем запустить ваш код, часть отсутствует.

2 Ответов

Рейтинг:
1

OriginalGriff

Во-первых, ваше состояние неправильное:

for(int j=i+1;j<=n;j++){
Массивы C работают от 0 до N - 1, поэтому j выйдет за пределы массива.
Попробуй
for(int j=i+1;j<n;j++){

Во-вторых, ваш printf требуется два значения, а вы предоставляете только одно:
printf("%d %d ",a[i]);

Попробуй:
printf("%d ",a[i]);

И это должно начать работать.


Честно говоря, быстрый взгляд на ваши предупреждения компиляции показал бы вам второе (если вы используете gcc, большинство других компиляторов просто позволят вашему приложению аварийно завершить работу), а 5 минут с отладчиком показали бы вам первое...

И сделайте себе одолжение: сделайте отступ в своем коде! Это делает его целой нагрузкой легче видеть, что происходит ...


Рейтинг:
1

Patrice T

Совет: Научитесь правильно делать отступы в вашем коде, это покажет его структуру и поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.

int count=0,i,j;
int counter[n];
for(i=0;i<n;i++){
    counter[i]=1;
}
for(int i=0;i<n;i++){
    for(int j=i+1;j<=n;j++){
        if(a[i]==a[j]){
            counter[i]++;
            counter[j]++;
        }
    }
}
for(i=0;i<n;i++){
    if(counter[i]">1)
        printf("%d %d ",a[i]);
    }

Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]