Другие языки программирования и технологии

Дан массив а1,...а50. Найти в нем последовательности.. смотрите внутри. Задание на Си. Подскажите с чего начать

Дан массив а1,...а50. Найти в нем последовательности из идущие подряд трех равных между собой элементов, и удалить два из них. Если таких нет напечатать 0.
Zelimkhan Kharsaev
Zelimkhan Kharsaev
196
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>

size_t newsize(int *, size_t);
void show_array(int *, size_t);

int main() {
    size_t size = 50, n, m, nsize;
    int * arr = NULL, * temp = NULL;
    srand((unsigned)time(NULL));
    arr = (int *)calloc(size, sizeof(int));
    for (n = 0; n < size; n++) arr[n] = 1 + rand() % 4;
    show_array(arr, size);
    nsize = newsize(arr, size);
    if (size != nsize) {
        temp = (int *)calloc(size, sizeof(int));
        for (n = 0; n < size; n++) temp[n] = arr[n];
        arr = (int *)realloc(arr, nsize * sizeof(int));
        for (n = 0, m = 0; n < size; n++) {
            if (!n || n == size - 1);
            else if (temp[n] == temp[n - 1] && temp[n] == temp[n + 1]) {
                ++n;
                continue;
            }
            arr[m++] = temp[n];
        }
        free(temp);
        show_array(arr, nsize);
    } else printf("\n0");
    free(arr);
    _getch();
    return 0;
}

void show_array(int * _array, size_t _size) {
    size_t n;
    for (n = 0; n < _size; n++) printf("%2i", _array[n]);
}

size_t newsize(int * _array, size_t _size) {
    size_t size = _size, n;
    for (n = 1; n < _size - 1; n++)
        if (_array[n] == _array[n - 1] && _array[n] == _array[n + 1]) {
            size -= 2;
            ++n;
        }
    printf("\n");
    return size;
}
Александр Петрович
Александр Петрович
58 643
Лучший ответ

Похожие вопросы