这个用于交换数组两半的程序不起作用

时间:2014-11-23 05:58:38

标签: c++

#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}

1 个答案:

答案 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)]);
}

http://ideone.com/mKy2IL