我想写一个程序:
- 生成大小为 (2Nx2N) 的二次矩阵
- 打印这个矩阵
- 顺时针交换矩阵的四分之一(从顶部开始 左角)
- 打印改变的矩阵
例如,我的程序的输出应该是这样的:
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16
Matrix (changed)
09 10 01 02
13 14 05 06
11 12 03 03
15 16 07 08
这是我的源代码:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using namespace std;
const int n = 4; // size of matrix
void CreateMatrix(int matrix[][n], int n); // functions' prototypes
void PrintMatrix(int matrix[][n], int n);
void ProcessMatrix(int matrix[][n], int n);
int main()
{
int matrix[n][n];
srand(time(NULL));
CreateMatrix(matrix, n); //create matrix
PrintMatrix(matrix, n); //print matrix
ProcessMatrix(matrix, n); //change matrix
cout<<"\nMatrix(changed):\n";
PrintMatrix(matrix, n); // print changed matrix
}
void CreateMatrix(int matrix[][n],int n)
{
for (int i =0; i<n; i++)
for(int j = 0; j<n; j++)
matrix[i][j] = rand()%10;
}
void PrintMatrix(int matrix[][n], int n)
{
for(int i=0; i<n; i++)
{
for (int j = 0; j < n; j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<"\n";
}
}
void ProcessMatrix(int matrix[][n], int n)
{
// I don't know how to write this function
}
所以我的问题是如何编写 ProcessMatrix 函数? 任何帮助表示赞赏! 顺便说一句,这是我的尝试:
void ProcessMatrix(int matrix[][n], int n)
{
for (int i = 0; i<n/2; i++)
{
for(int j=0; j<n/2; j++)
{
matrix[i][j] = matrix[i+n/4][j+n/4]; // something wrong here
}
}
}
最佳答案
将 m[i][j]、m[N+i][j]、m[N+i][N+j] 和 m[N+i][j] 旋转为 (i,j ) 在 (0..N-1, 0..N-1) 中。
关于c++ - 如何顺时针交换二次矩阵的四分之一(从左上角开始)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671861/