Cгенерировать массив и развернуть все его положительные последовательности.Например, если массив-"1,-1, 2, 3, 4,-5" он должен стать "1,-1, 4, 3, 2,-5"
Я реализовал перебор, но после многих попыток всё еще не получается сделать это нормально, вылезают лишние числа и не показывает законченный масив. Прошу подсказать как мне выполнить это задание. И пожалуйста с использованием только даных библиотек.
#include <stdlib.h>
#include <time.h>
using namespace std;
int Arr[100];
int main()
{
srand(time(NULL));
int n;
int sequenceStart;
int sequenceEnd;
int currentElement = 0;
printf("Starting array\n");
for (n = 0; n < 100; Arr[n++] = (rand() % 101) - 50);
for (n = 0; n < 100; printf("%3d ", Arr[n++]));
putchar('\n');
for (n = 0; n < 100; n++)
{
if (Arr[n] > 0)
{
sequenceStart = n;
sequenceEnd = sequenceStart;
while (currentElement > 0)
{
n++;
if (n < 100)
{
currentElement = Arr[n];
if (currentElement > 0)
{
sequenceEnd++;
}
}
else
break;
}
}
}
system("pause");
return 0;
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Логика какая-то непонятная. Попробуйте такое:
int sequenceStart = -1;
for (n = 0; n <= 100; n++) {
if (n==100 || Arr[n] < 0) {
if (sequenceStart >= 0) {
reverse(Arr, sequenceStart, n-1);
sequenceStart = -1;
}
}
else {
if (sequenceStart < 0)
sequenceStart = n;
}
}
Функцию reverse для обращения фрагмента массива сами, наверное, напишете (можно и без функции, прямо в том месте цикл обращения добавить)