2014-11-23 39 views
-2
#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} =>输出{4,2,6,9,8}此程序用于交换阵列的两半不起作用

+1

啊...你真的双空间你的代码? – 2014-11-23 05:59:33

+0

欢迎来到StackOverflow。请访问[help/on-topic]以了解这里的主题有哪些类型的问题。一个很好的问题包含一个明确的问题陈述(不是“这个程序不工作”),以及预期的行为与实际行为。我们无法读懂你的想法。 – 2014-11-23 06:15:50

+0

你能否回答我的疑问? – 2014-11-23 06:16:55

回答

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

http://ideone.com/mKy2IL