Перед каждым отрицательным элементом массива вставить нулевой элемент - 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;
}

Объяснение кода листинга программы

В этом коде:

  1. Создается массив arr размером n для хранения входных данных.
  2. Вводится количество отрицательных чисел в массиве n.
  3. Создается второй массив tmp размером n, который будет использоваться для обработки входных данных.
  4. В цикле for происходит ввод n чисел во второй массив tmp.
  5. В каждой итерации цикла проверяется, является ли число отрицательным. Если это так, увеличивается счетчик count.
  6. После завершения цикла for первый массив arr удаляется с помощью оператора delete.
  7. Создается новый массив arr размером n + count, где n - это исходный размер массива, а count - количество отрицательных чисел.
  8. Используется два вложенных цикла while, чтобы перебрать исходный массив tmp.
  9. Если число в массиве tmp отрицательное, то в новом массиве arr сначала записывается ноль, а затем само число.
  10. Если число положительное или ноль, оно просто копируется в новый массив arr.
  11. После завершения циклов while, второй массив tmp удаляется с помощью оператора delete.
  12. В цикле for элементы нового массива arr выводятся на экран через пробел.
  13. Программа возвращает 0, что означает успешное завершение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы