矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度(升级版)

时间:2022-07-24
本文章向大家介绍矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度(升级版),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

0. 前言

现主要实现不使用额外空间完成矩阵元素逆时针旋转90度。

给出一个矩阵,得到他的转置矩阵,输入以及要求输出如下: e.g.0.1 示例1 3*3矩阵

Input
1    2    3
4    5    6
7    8    9

Output:
3 	6	9 
2	5	8 
1	4	7 

e.g.0.2 示例2 4*4矩阵

Input:
1    2    3    4    
5    6    7    8
9    10   11   12
13   14   15   16

Output:
4	8	12	16 
3	7	11	15 
2	6	10	14 
1	5	9	13

1. 程序C++版

Code.1.1 示例程序C++版

#include <iostream>
using namespace std; 
#define R 4 
#define C 4 

void reverseColumns(int arr[R][C]) 
{ 
	for (int i = 0; i < C; i++) 
		for (int j = 0, k = C - 1; j < k; j++, k--) 
			swap(arr[j][i], arr[k][i]); 
} 

void transpose(int arr[R][C]) 
{ 
	for (int i = 0; i < R; i++) 
		for (int j = i; j < C; j++) 
			swap(arr[i][j], arr[j][i]); 
} 

void printMatrix(int arr[R][C]) 
{ 
	for (int i = 0; i < R; i++) { 
		for (int j = 0; j < C; j++) 
			cout << arr[i][j] << " "; 
		cout << 'n'; 
	} 
} 
 
void rotate90(int arr[R][C]) 
{ 
	transpose(arr); 
	reverseColumns(arr); 
} 

int main() 
{ 
	int arr[R][C] = { { 1, 2, 3, 4 }, 
					{ 5, 6, 7, 8 }, 
					{ 9, 10, 11, 12 }, 
					{ 13, 14, 15, 16 } }; 
	rotate90(arr); 
	printMatrix(arr); 
	return 0; 
} 

1. 程序Python版

Code.1.1 示例程序Python版

R = 4
C = 4

def reverseColumns(arr): 
	for i in range(C): 
		j = 0
		k = C-1
		while j < k: 
			t = arr[j][i] 
			arr[j][i] = arr[k][i] 
			arr[k][i] = t 
			j += 1
			k -= 1

def transpose(arr): 
	for i in range(R): 
		for j in range(i, C): 
			t = arr[i][j] 
			arr[i][j] = arr[j][i] 
			arr[j][i] = t 

def printMatrix(arr): 
	for i in range(R): 
		for j in range(C): 
			print(str(arr[i][j]), end =" ") 
		print() 

def rotate90(arr): 
	transpose(arr) 
	reverseColumns(arr) 

arr = [[1, 2, 3, 4], 
		[5, 6, 7, 8], 
		[9, 10, 11, 12], 
		[13, 14, 15, 16] 
	]; 
rotate90(arr) 
printMatrix(arr)