Преобразовать массив, уменьшив каждую его серию на один элемент - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д