二维数组逆时针旋转90度, 如
1,2,3
4,5,6
7,8,9
变成
3,6,9
2,5,8
1,4,7
但不借助临时数组
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
也可一步交换
只要找清楚规律即可
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;
}