Другие языки программирования и технологии
Дан массив а1,...а50. Найти в нем последовательности.. смотрите внутри. Задание на Си. Подскажите с чего начать
Дан массив а1,...а50. Найти в нем последовательности из идущие подряд трех равных между собой элементов, и удалить два из них. Если таких нет напечатать 0.
#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;
}
#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;
}
Похожие вопросы
- C# Дан массив размера N. Найти 2 элемента массива, сумма которых наиболее близка к максимуму массива и поменять
- Pascal . Дан массив вещественных чисел. Найти сумму элементов, номера которых являются простыми числами
- Дан массив N*N. Найти индекс левого верхнего элеманта квадрата 2х2 с макс суммой+вывезти сумму! Помагите написать код
- Дан массив из 20 элементов. Найти три «соседних» элементов, сумма значений которых максимальна. как это на СИ сделать?
- Дан массив из 8 байт. Рассматривая его, как массив из 64 бит посчитать длину самой длинной последовательности единиц.
- дан массив целых чисел F1,F2...Fn. распечатать элементы, нах-ся между min и max и их номера. подскажите где я ошибся
- pascal одномерные массивы. дан массив А(30).
- Дан массив. Выведите те его элементы, которые встречаются в массиве только один раз. В чем ошибка?
- Найти наибольшую возрастающую последовательность в массиве С++
- помогите? Дан массив целых чисел (n=15),