Code Bye

二维数组旋转不借助临时工作数组

二维数组逆时针旋转90度, 如
1,2,3
4,5,6
7,8,9
变成
3,6,9
2,5,8
1,4,7
但不借助临时数组
解决方案

10

先来个两步的
123
456
789
–>行交换
789
456
123
–>
然后 37交换。68交换,24交换 三条主对角线的元素交换,位置 为 x+y=a
3,6,9
2,5,8
1,4,7
也可一步交换
只要找清楚规律即可

5

10

参考:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void swap(int* a,int *b){
	int t=*a;
	*a=*b;
	*b=t;
}
void transp(int a[][3],int n){
	int i,j;
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
			swap(&a[i][j],&a[j][i]);
	for(i=0;i<n/2;i++)
		for(j=0;j<n;j++)
			swap(&a[i][j],&a[n-1-i][j]);
}
int main(){
	int a[][3]={
		{1,2,3},
		{4,5,6},
		{7,8,9}
	};
	int i,j;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
		{
			printf("%d\t",a[i][j]);
			if(2==j) printf("\n");
		}
		printf("\n");
		transp(a,3);
		for(i=0;i<3;i++)
			for(j=0;j<3;j++)
			{
				printf("%d\t",a[i][j]);
				if(2==j) printf("\n");
			}
			return 0;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明二维数组旋转不借助临时工作数组