APCS程式檢測 -實作題1050305 第2題 矩陣轉換

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *