Member 13589920 Ответов: 1

Каково же решение этой проблемы?


Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции последних отрицательных элементов и отсортировать элементы, находящиеся между ними.

Например:2 25-19 -4 10 -17 17 2 3 20 18 -7 20 7 0 98 7 3 6 78.
Здесь мы должны найти элементы между -19 и -7(пример)

Что я уже пробовал:

я пытался
int find(int arr[], const int SIZE = 20) {

	srand(time(NULL));

	for (int i = 0; i < SIZE; i++)
	{
		arr[i] = rand() % (40 + 1) - 20 + 1;
	}

	for (int i = 0; i < SIZE; i++)
	{
		cout << arr[i] << " ";
	}

	cout << "\n\n";

	int left_negative = 0;

	for (int i = 0; i < SIZE; i++)
	{
		if (arr[i] < 0) {
			left_negative = i;
			break;
		}
	}


	int right_negative = 0;

	for (int i = SIZE - 1; i > 0; i--)
	{
		if (arr[i] < 0) {
			right_negative = i;
			break;
		}
	}

	for (int i = left_negative + 1; i < right_negative - 1; i++)
	{
		for (int i = left_negative + 1; i < right_negative - 1; i++) {
			if (arr[i] > arr[i + 1]) {
				int temp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = temp;
			}
		}
	}

	for (int i = 0; i < SIZE; i++)
	{
		cout << arr[i] << " ";
	}

	return 0;
}


int main() {

	const int SIZE = 20;

	int arr[SIZE];

	find(arr, SIZE);
}

Patrice T

А у вас есть вопрос?

1 Ответов

Рейтинг:
0

CPallini

В чем же проблема? Ваш код выглядит правильно.
Пожалуйста, обратите внимание, что вы могли бы написать более лаконичный код usign modern C++ особенности, например:

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

void order_seq( vector <int> & v)
{
  auto neg =  [](int  x){return x < 0;};
  auto itleft = find_if( v.begin(), v.end(), neg);
  auto itright = find_if( v.rbegin(), v.rend(), neg);
  sort(itleft + 1, itright.base()-1);
}

int main()
{
  vector <int> v{2, 25,-19, -4, 10, -17, 17, 2, 3, 20, 18, -7, 20, 7, 0, 98, 7, 3, 6, 78};
  order_seq(v);
  for ( const auto & x : v)
    cout << x << " ";
  cout << endl;
}