Преобразовать массив, уменьшив каждую его серию на один элемент - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите решить задачу. Вот код который написал я он работает немного не точно, доработайте плиииз ну или можете написать свой я разберусь, заранее СПАСИБО
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
/**
    Дан целочисленный массив размера N, содержащий по крайней мере одну серию, длина которой больше 1.
 Преобразовать массив, уменьшив каждую его серию на один элемент. Серия — группа подряд идущих одинаковых элементов.
 Длина серии — количество этих элементов (может быть равна 1).
 **/
 
int main()
{
    srand(time(NULL));
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n,i;
    printf("Введите размер массива N = ");
    scanf("%d",&n);
    int arr[n];
    printf("Стартовый массив:\n");
    for (i=0;i<n;i++)
    {
        printf("A[%d]=",i);
        scanf("%d",&arr[i]);
    }
    printf("\n");
    int k=0,t=0;
    for (i=k;i<n;i++)
    {
 
                    if (arr[i]!=arr[i+1])
 
                    {
                        arr[i]=arr[i+1];
                        t++;
                        k=i;
                    }
                    else
                        if (arr[i]==arr[i+1])
                        {
                            i++;
                            k=i;
                        }
 
    }
 
    if (n==t)
        printf("\n\n\n        Все элемены удалены!");
    else{
            printf("\n\n\n       Итоговый массив: ");
    for(i=0;i<n-t;i++)
    {
        printf("%d ",arr[i]);
    }
    }
    return 0;
}

Решение задачи: «Преобразовать массив, уменьшив каждую его серию на один элемент»

textual
Листинг программы
#include <stdio.h>
 
int array_delrep(int a[], int n){
    int j, i;
    for(n -= 1, i = 0; i < n; ++i){
        if(a[i] == a[i + 1])
            break;
    }
 
    for(j = i; i < n; a[i] = a[j]){
        if(a[j] != a[j + 1])
            ++i;
        else 
            --n;
        ++j;
    }
    return n + 1;
}
 
int main(void){
    int i;
    int a[] = { 0,0, 1,1,1, 2,2, 3,3,3,3,3, 4,4, 5, 6,6,6, 7,7,7,7, 8, 9,9,9,9 };
    int n   = sizeof(a)/sizeof(a[0]);
 
    n = array_delrep(a, n);
    for(i = 0; i < n; ++i)
        printf("%d ", a[i]);
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы