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