Удалить из массива все элементы, встречающиеся более двух раз - C (СИ) (72205)
Формулировка задачи:
#include <stdio.h> #include <stdlib.h> int main() { int n; scanf("%d",&n); int m[n]; for (int i=0;i<n;i++) scanf("%d",&m[i]); for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (m[i]==m[j]){ for (int k=0;k<n;k++) if(m[i]==m[k]){ int l=k; for(l;l<n;l++){ m[l]=m[l+1]; } n=n-1; } } for(int i=0;i<n;i++) printf("%d ",m[i]); system("PAUSE"); return 0; }
Решение задачи: «Удалить из массива все элементы, встречающиеся более двух раз»
int main() { int n; scanf("%d",&n); // В стандартом C нельзя объявлять переменные после исполняемых операторов // И так массивы объявлять нельзя. int m[n]; for (int i=0;i<n;i++) scanf("%d",&m[i]); for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (m[i]==m[j]){ for (int k=0;k<n;k++) if(m[i]==m[k]){ int l=k; for(l;l<n;l++){ m[l]=m[l+1]; } n=n-1; } } for(int i=0;i<n;i++) printf("%d ",m[i]); system("PAUSE"); return 0; }
Объяснение кода листинга программы
В этом коде сначала запрашивается размер массива (n) и затем создается массив m размером n. Затем в цикле происходит чтение n чисел и запись их в массив m. Далее начинается процесс удаления дубликатов. В цикле два внутренних цикла сравнивают каждый элемент массива с каждым другим элементом. Если находятся одинаковые числа, то во внутреннем цикле (с k) начинается процесс переноса всех элементов (начиная с k+1), пока не будет найден элемент, который не равен текущему. Затем во внутреннем цикле (с l) элементы массива сдвигаются на одну позицию вправо, начиная с нуля, и при этом удаляется последний элемент массива (т.е. его длина уменьшается на 1). В конце программы выводится на экран полученный массив. Код не оптимален, и на больших массивах может работать медленно, так как имеет квадратичную сложность.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д