APCS程式檢測 -實作題1050305 第2題 矩陣轉換
如果不清楚二維陣列,可以先來這裡看看
https://husking-studio.com/cpp-2d-array/
翻轉
//翻轉
void Flip(int nMatrixA[MAX_ROW][MAX_COL], int row, int col)
{
//暫存矩陣
int nMatrixTemp[MAX_ROW][MAX_COL];
//翻轉
int nNew_i;
int nNew_j;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
nNew_i = (row - 1) - i;
nNew_j = j;
nMatrixTemp[nNew_i][nNew_j] = nMatrixA[i][j];
}
}
//將暫存矩陣的內容複製回 A
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
nMatrixA[i][j] = nMatrixTemp[i][j];
}
旋轉
//旋轉
void Rotate(int nMatrixA[MAX_ROW][MAX_COL], int* pRow, int* pCol)
{
//暫存矩陣
int nMatrixTemp[MAX_ROW][MAX_COL];
//調整行列
int nOldRow = *pRow;
int nOldCol = *pCol;
int nNewRow = *pCol;
int nNewCol = *pRow;
*pRow = nNewRow;
*pCol = nNewCol;
//旋轉
int nNew_i;
int nNew_j;
for (int i = 0; i < nOldRow; i++)
{
for (int j = 0; j < nOldCol; j++)
{
nNew_i = j;
nNew_j = (nOldRow - 1) - i;
nMatrixTemp[nNew_i][nNew_j] = nMatrixA[i][j];
}
}
//將暫存矩陣的內容複製回 A
for (int i = 0; i < nNewRow; i++)
for (int j = 0; j < nNewCol; j++)
nMatrixA[i][j] = nMatrixTemp[i][j];
}
完整程式碼
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
const int MAX_ROW = 10;
const int MAX_COL = 10;
void Flip(int nMatrixA[MAX_ROW][MAX_COL], int row, int col); //翻轉
void Rotate(int nMatrixA[MAX_ROW][MAX_COL], int *pRow, int *pCol); //旋轉
int main()
{
//宣告矩陣並初始化
int nMatrixA[MAX_ROW][MAX_COL];
for (int i = 0; i < MAX_ROW; i++)
for (int j = 0; j < MAX_COL; j++)
nMatrixA[i][j] = -1;
//處理第一行輸入
string strInput;
getline(cin, strInput);
stringstream delim(strInput);
string pch;
getline(delim, pch, ' ');
int R = stoi(pch);
getline(delim, pch, ' ');
int C = stoi(pch);
getline(delim, pch, ' ');
int M = stoi(pch);
//將輸入值設定進矩陣
int nRow = R;
int nCol = C;
for (int i = 0; i < nRow; i++)
{
string strInput2;
getline(cin, strInput2);
stringstream delim2(strInput2);
string pch2;
for (int j = 0; j < nCol; j++)
{
getline(delim2, pch2, ' ');
int value = stoi(pch2);
nMatrixA[i][j] = value;
}
}
//處理翻轉和旋轉的輸入
string strInput3;
getline(cin, strInput3);
stringstream delim3(strInput3);
string pch3;
for (int i = 0; i < M; i++)
{
getline(delim3, pch3, ' ');
int nOperate = stoi(pch3);
if(nOperate == 1) //翻轉
Flip(nMatrixA, nRow, nCol);
else if(nOperate == 0) //旋轉
Rotate(nMatrixA, &nRow, &nCol);
}
//印出答案
cout << nRow << " " << nCol << endl;
for (int i = 0; i < nRow; i++)
{
for (int j = 0; j < nCol; j++)
{
if (j == nCol - 1)
cout << nMatrixA[i][j];
else
cout << nMatrixA[i][j] << " ";
}
cout << endl;
}
system("pause");
return 0;
}
//翻轉
void Flip(int nMatrixA[MAX_ROW][MAX_COL], int row, int col)
{
//暫存矩陣
int nMatrixTemp[MAX_ROW][MAX_COL];
//翻轉
int nNew_i;
int nNew_j;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
nNew_i = (row - 1) - i;
nNew_j = j;
nMatrixTemp[nNew_i][nNew_j] = nMatrixA[i][j];
}
}
//將暫存矩陣的內容複製回 A
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
nMatrixA[i][j] = nMatrixTemp[i][j];
}
//旋轉
void Rotate(int nMatrixA[MAX_ROW][MAX_COL], int* pRow, int* pCol)
{
//暫存矩陣
int nMatrixTemp[MAX_ROW][MAX_COL];
//調整行列
int nOldRow = *pRow;
int nOldCol = *pCol;
int nNewRow = *pCol;
int nNewCol = *pRow;
*pRow = nNewRow;
*pCol = nNewCol;
//旋轉
int nNew_i;
int nNew_j;
for (int i = 0; i < nOldRow; i++)
{
for (int j = 0; j < nOldCol; j++)
{
nNew_i = j;
nNew_j = (nOldRow - 1) - i;
nMatrixTemp[nNew_i][nNew_j] = nMatrixA[i][j];
}
}
//將暫存矩陣的內容複製回 A
for (int i = 0; i < nNewRow; i++)
for (int j = 0; j < nNewCol; j++)
nMatrixA[i][j] = nMatrixTemp[i][j];
}