Создание нового массива, содержащего все элементы исходного массива, которые расположены перед первым отрицательным элементом

#c

#c

Вопрос:

Это то, что я хочу: на основе исходного массива создайте новый массив, содержащий все элементы исходного массива, которые расположены перед первым отрицательным элементом. Вот мой код:

 #include <iostream>
#include <ctime>
#include <cmath>
#include <iomanip>
#include <vector>

using namespace std;
int main() {

  const int N = 1000;
  int a[N];
  int k;
  bool f = false;
  vector<int> b;
  cout << "Input size of array: ";
  cin >> k;
  cout << "Input elements: ";
  for (int i = 0; i < k; i  ) cin >> a[i];
  cout << endl;
  for (int i = 0; i < k; i  )
  {
    if (a[i] < 0 amp;amp; !f)
    {
      f = true;
    }
    if (f) b.push_back(a[i]);
  }
  if (!f) cout << "No negative n >> ";
  else for (int i = 0; i < b.size(); i  ) cout << b[i] << " ";
  cin.get();
  return 0;
}
  

Я вывожу первое отрицательное значение, но нужно ПЕРЕД первым отрицательным.

Комментарии:

1. В if (f) b.push_back(a[i]); подумайте о том, когда условие будет истинным, и хотите ли вы, чтобы код выполнялся в этом случае. Еще лучше использовать отладчик, чтобы увидеть, каково состояние переменных при выполнении.

2. именование переменных важно. Если бы ваш bool f = false; был назван bool do_copy_elements_to_the_other_vector = false; , было бы легче понять, почему он должен начинаться как true not false

3. Здесь очень не одобряется удаление части вашего вопроса, которая делает его понятным для будущих читателей.

Ответ №1:

Здесь вы используете f в качестве флага, который изначально false . Это означает, что вы еще не получили никакого отрицательного значения. Когда значение f будет истинным, вы можете сказать, что получили хотя бы одно отрицательное число, и поскольку f равно true, вы не будете продвигать какие-либо элементы дальше.

Итак, вы должны вводить вектор, пока не получите хотя бы 1 отрицательное число. Это означает, что вы должны нажимать только тогда, когда флаг имеет значение false .

Итак, ваш оператор push должен выглядеть следующим образом:

 if (!f) b.push_back(a[i]);