簡體   English   中英

在 C++ 中為列交換行

[英]Swap Rows for Columns in C++

我在嘗試按列更改行時遇到了一些麻煩。

我想要的只是更改靜態二維數組 (3x3) 的行和列。 我不想只是簡單地打印帶有反向索引的數組。 我試圖將數組中實際位置的值存儲在int aux 中,但沒有效果。

輸入:

1 2 3 
4 5 6
7 8 9

輸出:

1 4 7
2 5 8
3 6 9

使用此代碼,結果是相同的二維數組。 我看不到問題,你能幫我嗎?

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

您正在交換元素兩次。 於是他們又回到了原來的地方。

改變

if(x!=y)

if(x < y)

所以只有當元素是(2,3)時才交換。 如果是(3,2),那么它已經被交換了,我們不應該再交換它。

您真正需要做的就是交換。 在 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迭代整個向量。 這是因為如果我們確實迭代了整個向量,它會將它們交換回原來的位置。

正如下面發布的那樣,你切換了兩次。 要迭代最少的次數,最明智的更改是更改您的第二個 for 循環:

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

for (y = 0; y < x; y++)
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.
}

你交換了兩次伙伴! 只需交換x < yx > y但不能同時交換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM