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