Эта программа для замены двух половин массива не работает

#include<iostream>

int main()
{
 int n, j, p, x[100];
 std::cout << "Enter the number of elements";
 std::cin >> n;
 for ( int i = 0; i < n; i++ )
 {
 std::cout << "Enter value";
 std::cin >> x[i];
 }
 p = n / 2;
 for ( int j = 0; j < p; j++ )
 {
 int z = 0;
 z = x[j];
 x[j] = x[j + p];
 x[j + p] = z;
 }
 for ( j = 0; j < n; j++ )
 {
 std::cout << x[j] << std::endl;
 }
}
</iostream>

Эта программа не работает. пожалуйста, помогите мне найти ошибку. Он меняет некоторые значения и оставляет некоторые значения такими, какими они есть. Но он должен работать следующим образом: input {2,4,6,8,9} => output {4,2,6,9,8}

1 ответ

Проясните, что вы подразумеваете под "половинками" массива с нечетным количеством элементов (чего вы ожидаете получить в общем случае?)

В вашем коде n равно 5, так что p равно 2, а j итерации от 0 до 1. x [0] заменяется на x [2], а x [1] заменяется на x [3].

В примере "input {2,4,6,8,9} => output {4,2,6,9,8}" кажется, что вы хотите перевернуть каждую половину массива, чтобы он что-то вроде:

#include <algorithm>

for (size_t j = 0; j < p / 2; j++)
{
 std::swap(x[j], x[p - 1 - j]);
 std::swap(x[n - 1 - j], x[n - 1 - (p - 1 - j)]);
}
</algorithm>

http://ideone.com/mKy2IL

licensed under cc by-sa 3.0 with attribution.