2014-11-23 25 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