正方形矩阵顺时针旋转90度

给定一个n*n的矩阵matrix,请把这个矩阵顺时针转动90度。

输入描述

输入包含多行,第一行一个整数n(1≤n≤200),代表矩阵的行数和列数,接下来n行,每行n个整数,代表矩阵matrix(1≤matrix[i][j]≤40000)

输出描述:

输出旋转后的矩阵(包含n行,每行n个整数)

Sample Input

4

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

Sample Output

13 9 5 1

14 10 6 2

15 11 7 3

16 12 8 4

 需要申请新矩阵存放转置后的矩阵,不能原地转置:

#include<iostream>
using namespace std ;
int main(void)
{
	int n;
	cin>>n;
	int a[201][201],b[201][201];
	for(int i=0;i<n;i++)		//输入 
	{ 
		for(int j=0;j<n;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int j=n-1;j>=0;j--)		//转置 
	{
		for(int i=0;i<n;i++)
		{
			b[i][j]=a[n-j-1][i];
		}
	}
	for(int i=0;i<n;i++) 		//输出 
	{
		for(int j=0;j<n;j++)
		{
			cout<<b[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

 原地转置:

#include<iostream>
#define N 201
using namespace std;
void turn(int arr[N][N],int a,int b,int c,int d)
{
	int temp;
	for(int i=0;i<d-b;i++)
	{
		temp=arr[a][b+i];
		arr[a][b+i]=arr[c-i][b];
		arr[c-i][b]=arr[c][d-i];
		arr[c][d-i]=arr[a+i][d];
		arr[a+i][d]=temp;
	}
}
void func(int arr[N][N],int n)		//按环状从外层到内层开始旋转  
{
	//从左上角至右下角往中心缩小  
	int a=0;
	int b=0;
	int c=n-1;
	int d=n-1;
	while(a<c)
	{
		turn(arr,a++,b++,c--,d--);
	}
}
int main(void)
{
	int n;
	cin>>n;
	int a[N][N];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cin>>a[i][j];
		}
	}
	func(a,n);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
 } 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ლ旺旺掀被

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值