Найти в массиве последовательности из идущих подряд трех равных между собой элементов, и удалить два из них - C (СИ)
Формулировка задачи:
Задача: Дан массив а1,...,а50. Найти в нем последовательности из идущие подряд трех равных между собой элементов, и удалить два из них. Если таких нет напечатать 0.
Подскажите хотя бы на словах, что за чем делать. Заранее благодарен.
Решение задачи: «Найти в массиве последовательности из идущих подряд трех равных между собой элементов, и удалить два из них»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ int n=0;//Вводим количество элементов printf("Write size of array:\n"); scanf("%d", &n); int *a = (int *)calloc(n, sizeof(int));//Вводим элементы масива printf("Write elements of array:\n"); for(int i=0;i<n;i++) scanf("%d", &a[i]); int t = a[0], s = 1, w = 1;//в t - имеем текушее значение, s - количествораз которое t встречалось без перерыва, w - флаг того что небыло обнаруженно последовательностей длины 3 for(int i=1;i<n;i++){ // со второго элемента проверяем if(a[i] == t) // если a[i] == t то увеличиваем значение s s++; else{// устанавливаем новое значение t=a[i] и то количество раз которое оно встречалось s = 1 t = a[i]; s = 1; } if(s == 3){//если текущее значение t встретилось в s=3ий раз, то for(int j=i-1, k = i+1;k<n;j++, k++) // сдвигаем элементы масива a[j] = a[k]; //j - второй повторяющийся элемент, k - следующий элемент за третим повторяющимся элементом a = (int *)realloc(a, (n-2)*sizeof(int)); // изменяем раззмер на 2 n-=2;i-=2;t = a[i];s = 1;// устанавливаем соот значения w = 0; // ставим флаг того что изменение произошло, те не 0 не будет выведен 0 } } if(w==1){// если изменения не было выводим 0 printf("Result is:\n"); printf("0\n"); }else{// иначе выводим изменённый масив printf("Result is:\n"); for(int i=0;i<n;i++) printf("%d ", a[i]); printf("\n"); } return 0; }
Объяснение кода листинга программы
- Программа запрашивает у пользователя размер массива и сохраняет его в переменной
n
. - Программа выделяет память под массив
a
с помощью функцииcalloc
и сохраняет указатель на начало массива в переменнойa
. - Программа запрашивает у пользователя значения для заполнения массива
a
и сохраняет их в соответствующую память. - Программа инициализирует переменные
t
,s
иw
значениями, необходимыми для поиска последовательности из трех одинаковых элементов. - Программа начинает цикл, который проходит по всем элементам массива, начиная со второго, и проверяет, является ли текущий элемент равным
t
. - Если текущий элемент равен
t
, программа увеличивает значениеs
на единицу. - Если текущий элемент не равен
t
, программа устанавливает новое значениеt
и сбрасывает значениеs
на единицу. - Если значение
s
равно 3, программа начинает цикл, который сдвигает элементы массива, начиная с третьего повторяющегося элемента, и изменяет размер массива на два элемента меньше. - После завершения цикла программа проверяет значение переменной
w
. Если оно равно 1, программа выводит сообщение0
, что означает, что в массиве не было найдено последовательности из трех одинаковых элементов. - Если значение переменной
w
не равно 1, программа выводит измененный массив.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д