在C ++中交换列的行

时间:2013-12-13 19:39:30

标签: c++ visual-c++

我在尝试按列更改行时遇到了一些麻烦。

我想要的只是更改静态2D数组(3x3)的行和列。我不想只是用反向索引打印数组。我试图在 int aux 中存储数组中实际位置的值,但没有效果。

输入:

1 2 3 
4 5 6
7 8 9

输出:

1 4 7
2 5 8
3 6 9

使用此代码,结果是相同的2D数组。我看不出问题,你能帮助我吗?

#include <iostream>

using namespace std; 

int main ()
{
    int vec[3][3];
    int x, y, aux;
//Input
    for(x=0; x<3;x++)
{
    for(y=0; y<3;y++)
    {
    cout << "POSITION ["<<x+1<<"]["<<y+1<<"]: ";
    cin >> vec[x][y];
    }
}

    cout<<"\nPress ENTER...";
    cin.ignore();
    cin.get();
    system("CLS");
//Array before the change
cout<<"ARRAY A"<<endl;
for(x=0; x<3;x++)
{
    for(y=0; y<3;y++)
    {
    cout<<vec[x][y]<<"\t";
    }
cout << "\n";
}
//Change
for(x=0; x<3;x++)
{
    for(y=0; y<3;y++)
    {
        if(x!=y)
        {
            aux=vec[x][y];
            vec[x][y]=vec[y][x];
            vec[y][x]=aux;
        }
    }
}

//Array after the change
cout<<"\nARRAY A"<<endl;
for(x=0; x<3;x++)
{
    for(y=0; y<3;y++)
    {
    cout<<vec[x][y]<<"\t";
    }
cout << "\n";
}
cout << "\n";
system("PAUSE");
return 0;
}

5 个答案:

答案 0 :(得分:4)

您正在交换元素两次。因此他们回到原来的位置。

更改

if(x!=y)

if(x < y)

因此只有当元素说(2,3)时才交换。如果它是(3,2),那么它已经被交换了,我们不应该再次交换它。

答案 1 :(得分:1)

你真正需要做的就是交换。在3x3矩阵的情况下,它只是交换左下角和右上角的元素:

const int SIZE = 3;
for (int i = 0; i < SIZE; ++i)
{
    for (int j = 0; j < SIZE; ++j)
    {
        if (i < j)
        {
            swap(vec[i][j], vec[j][i]);
        }
    }
}

请注意,我们停止j迭代整个向量。这是因为如果我们迭代整个向量,它会将它们交换回原来的位置。

答案 2 :(得分:1)

如下所示,您可以切换两次。要迭代最少的次数,最明智的改变就是改变你的第二个循环:

for (y = 0; y < 3; y++)

for (y = 0; y < x; y++)

答案 3 :(得分:0)

int N = M-1;  // M is end bound for MxM matrix, only work for Mxm matrix.
int index1 = 1;
for (index0 = 0; index0 < N; index0++) // loop through row
{
    for(index1; index1 < M; index1++) //swapping about the diagn line.   
    {
        tempN = minorMatrix[index0][index1];
        minorMatrix[index0][index1] = minorMatrix[index1][index0];
        minorMatrix[index1][index0] = tempN;
    }
    index1++;  // number of swapping reduce by one after each row.
}

答案 4 :(得分:0)

您要交换两次伴侣! 只需交换x < yx > y,但不能两者都交换。