蓝桥杯-矩阵转置-顺时针旋转矩阵

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯-矩阵转置-顺时针旋转矩阵相关的知识,希望对你有一定的参考价值。

蓝桥杯-矩阵转置

#include <stdio.h>
#include <stdlib.h>
int fun(int array[][3],int m,int n)
	int i,j;
//	原来的矩阵 
	for(i=0;i<m;i++)
		for(j=0;j<n;j++)
			printf("%d ",array[i][j]);
		
		printf("\\n");
	
//	转置后的
	printf("\\n++++++++++++++++++++++\\n");
	int **p = (int**)malloc(m*sizeof(int*));
	for(i=0;i<n;i++)
		p[i] = (int*)malloc(sizeof(int*)); 
	
	for(i=0;i<m;i++)
		for(j=0;j<n;j++)
			p[i][j] = array[j][i];
		 
	 
	for(i=0;i<m;i++)
		for(j=0;j<n;j++)
			printf("%d ",p[i][j]);
		
		printf("\\n");
	
 
int main() 
	int a[3][3] = 1,2,3,4,5,6,7,8,9;
	fun(a,3,3);
	return 0;

顺时针旋转矩阵

#include <stdio.h>
#include <stdlib.h>
int fun(int array[][3],int m,int n)
	int i,j;
	int mid1,mid2;
//	原来的矩阵 
	printf("转置前:\\n");
	for(i=0;i<m;i++)
		for(j=0;j<n;j++)
			printf("%d ",array[i][j]);
		
		printf("\\n");
	
//	旋转后的矩阵
	if(n%2 == 0)
		mid1 = mid2 = n/2;
	else
		mid1 = n/2+1;
		mid2 = n/2;
	
	for(i=0;i<mid1;i++)
		for(j=0;j<mid2;j++)
			int temp = array[j][n-1-i];
			array[j][n-1-i] = array[i][j];
			int temp2 = array[n-1-i][n-1-j];
			array[n-1-i][n-1-j] = temp;
			temp = array[n-1-j][i];
			array[n-1-i][i] = temp2;
			array[i][j]  =temp;		
		
	
	printf("转置后:\\n");
	for(i=0;i<m;i++)
		for(j=0;j<n;j++)
			printf("%d ",array[i][j]);
		
		printf("\\n");
	
	return 0; 
 
int main() 
	int a[3][3] = 1,2,3,4,5,6,7,8,9;
	fun(a,3,3);
	return 0;

或者
将矩阵沿对角线翻转,之后再上下翻转;

以上是关于蓝桥杯-矩阵转置-顺时针旋转矩阵的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯今日份练习

蓝桥杯真题,求第二空的解析?

Leecode-48:旋转图像(矩阵顺时针旋转90度)

求顺时针旋转变换对应的矩阵

将下面矩阵分别按顺时针90度,逆时针90度,和旋转180度,打印出来

对一个方阵转置,就是把原来的行号变列号,原来的列号变行号