二维数组逆时针旋转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; }