Удалить из массива все элементы, встречающиеся более двух раз - C (СИ) (71944)
Формулировка задачи:
Условие задачи описано ниже, помогите пж найти ошибку в коде
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h> /** 9. Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся более двух раз, и вывести размер полученного массива и его содержимое. **/ int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); int n,i,j; printf("Введите размер массива: "); scanf("%d",&n); int arr[n]; for(i=0;i<n;i++) { printf("A[%d]=",i); scanf("%d",&arr[i]); } i=0; while (i<n) { int k=1,p; for (j=i+1;j<=n;j++) { if (arr[j]==arr[i]) k++; } if (k>2) { j=i; int x=arr[i]; while (j<n-1) { if (arr[j]==x) { for (p=j;p<=n;p++) { arr[p]=arr[p+1]; n--; } } else j++; } } else i++; } if (n==0) printf("Все элементы удалены"); else { printf("\n"); printf("Количество оставшихся элементов: %d",n); printf("\n"); printf("Массив после сжатия: "); for (i=0;i<n;i++) printf("%d ",arr[i]); } return 0; }
Решение задачи: «Удалить из массива все элементы, встречающиеся более двух раз»
textual
Листинг программы
#include <stdio.h> int pack(int arr[], const int size) { int offs = 0, i, j, k, cnt; for (i = 1; i < size; ++i) { cnt = 0; k = i - offs; for (j = k - 1; 0 <= j; --j) { cnt += (arr[i] == arr[j]); } if (cnt < 2) { arr[k] = arr[i]; } else { offs++; } } return size - offs; } void print(const int arr[], const int size) { if (0 < size) { printf("%d ", *arr); print(arr + 1, size - 1); } } int main() { int arr[] = {1, 3, 1, 1, 1, 2, 1, 2, 3, 1, 1, 2, 3, 3, 2, 3, 3, 3}; int size = sizeof(arr) / sizeof(*arr); print(arr, size); putchar('\n'); size = pack(arr, size); print(arr, size); putchar('\n'); return 0; }
Объяснение кода листинга программы
- В функции pack() удаляются все элементы массива, которые встречаются более двух раз.
- В функции main() создается массив arr[] и инициализируется значениями.
- Размер массива arr[] хранится в переменной size.
- Функция print() выводит элементы массива на экран.
- В функции main() сначала выводится исходный массив на экран, затем вызывается функция pack(), которая удаляет повторяющиеся элементы, и после этого выводится измененный массив на экран.
- Результатом работы программы будет вывод на экран исходного массива, а затем массива без повторяющихся элементов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д