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