[英]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 < y
或x > y
但不能同時交換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.