Перед каждым отрицательным элементом массива вставить нулевой элемент - C (СИ)
Формулировка задачи:
Вот условие задачи:
Задан вещественный массив размера N. Перед каждым отрицательным элементом массива вставить нулевой элемент.
Вот что у меня получилось:
Я понимаю в чём ошибка, нужно создать цикл для перемещения элементов в предыдущую позицию, чтобы ничего не потерять. Но не знаю как это организовать(
int main(int argc, char *argv[])
{
int n;
printf("Vvedite kolichestvo elementov\n");
scanf("%d",&n);
double a[n];
int d=0;
printf("Vvedite element\n");
for (int i=0;i<n;i++) scanf("%lf",&a[i]);
for (int i=0;i<n;i++) {
if (a[i]<0) a[i-2]=a[i-1], a[i-1]=0,
d=d+1;}
for (int i=0;i<n+d;i++)
printf("%lf\n",a[i]);
return 0;
}Решение задачи: «Перед каждым отрицательным элементом массива вставить нулевой элемент»
textual
Листинг программы
#include <iostream>
using namespace std;
int main()
{
int n, count = 0;
double *arr, *tmp;
cin >> n;
arr = new double[n];
tmp = new double[n];
for(int i = 0; i < n; i++)
{
cin >> arr[i];
tmp[i] = arr[i];
if(arr[i] < 0)
count++;
}
delete arr;
arr = new double[n+count];
int i = 0, k = 0;
while(i < n)
{
if (tmp[i] < 0)
{
arr[k] = 0;
arr[k+1] = tmp[i];
k += 2;
i++;
}
else
{
arr[k] = tmp[i];
k++;
i++;
}
}
delete tmp;
for (i = 0; i < n + count; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создается массив
arrразмеромnдля хранения входных данных. - Вводится количество отрицательных чисел в массиве
n. - Создается второй массив
tmpразмеромn, который будет использоваться для обработки входных данных. - В цикле
forпроисходит вводnчисел во второй массивtmp. - В каждой итерации цикла проверяется, является ли число отрицательным. Если это так, увеличивается счетчик
count. - После завершения цикла
forпервый массивarrудаляется с помощью оператораdelete. - Создается новый массив
arrразмеромn + count, гдеn- это исходный размер массива, аcount- количество отрицательных чисел. - Используется два вложенных цикла
while, чтобы перебрать исходный массивtmp. - Если число в массиве
tmpотрицательное, то в новом массивеarrсначала записывается ноль, а затем само число. - Если число положительное или ноль, оно просто копируется в новый массив
arr. - После завершения циклов
while, второй массивtmpудаляется с помощью оператораdelete. - В цикле
forэлементы нового массиваarrвыводятся на экран через пробел. - Программа возвращает 0, что означает успешное завершение.