Задача заключается в том, что дан массив действительных чисел a1, a2, ..., a2n. Необходимо получить a1, a2n, a2, a2n -1, ..., an, an + 1.
Говоря простым языком, если дан массив из пяти чисел, например: 1 2 3 4 5,
то в результате необходимо получить: 1 5 2 4 3.
Пытался отсортировать массив следующим образом, но что-то пошло не так:
for (int i = 0; i <= arr_size / 2.0; i++) {
double temp = arr[i + 1];
arr[i + 1] = arr[arr_size - i];
arr[arr_size - i] = temp;
}
Если я верно понял ваш алгоритм, то ваш алгоритм заключается в следующем:
У вас есть исходный массив. Далее вам нужно его преобразовать следующим образом: читать числа из исходного массива поочередно то с начала массива, то с конца.
Вот код, который будет делать то, что вам нужно(без создания нового массива, путем модификации существующего).
#include <iostream>
using namespace std;
int main() {
int a[] = {1, 2, 3, 4, 5};
const int arrsize = sizeof(a) / sizeof(int);
for (int i = 0; i < arrsize/2; ++i)
{
int temp = a[arrsize - 1];
for (int j = arrsize - 1; j > (i * 2 + 1); --j)
{
a[j] = a[j - 1];
}
a[i * 2 + 1] = temp;
}
for (int i = 0; i < arrsize; ++i)
std::cout << a[i];
std::cout << std::endl;
}
Вывод будет: 1,5,2,4,3.
Для массива большей длины также будет работать.
Попробуй вместо arr[arr_size-i] поставить arr[arr_size-1]
Предложу и свою версию:
int main(int argc, char *argv[])
{
std::cout << "Input number of members\n";
int nMembers;
std::cin >> nMembers;
std::vector<int> arr(nMembers, 0);
std::cout << "Input array\n";
for (auto &i : arr) {
std::cin >> i;
}
std::vector<int> nov(arr.size(), 0);
bool val = false;
for (auto i = arr.begin(), j = --arr.end(), l = nov.begin(); l != nov.end(); ++l) {
if (!val) {
*l = *i;
i++;
val = true;
}
else {
*l = *j;
j--;
val = false;
}
}
for (const auto &i : nov) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей