#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;
}
}
此程序无效。请帮我找错。它交换一些值并保留一些值。但它应该像这样工作 - 输入{2,4,6,8,9} =&gt;输出{4,2,6,9,8}
答案 0 :(得分:1)
请澄清,你是什么意思&#34;一半&#34;具有奇数个元素的数组(在一般情况下你期望获得什么?)
在你的代码中,n是5,所以p是2,j从0到1迭代.x [0]与x [2]交换,x [1]与x [3]交换。
在示例&#34;输入{2,4,6,8,9} =&gt;输出{4,2,6,9,8}&#34;,看起来更像你要反转数组的每一半,所以它会是这样的:
#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)]);
}