旋转n阶矩阵
1 2 3
4 5 6
7 8 9
顺时针旋转90度
7 4 1
8 5 2
9 6 3
解题方法:
(1)上下颠倒:
7 8 9
4 5 6
1 2 3
(2)反斜杠对角线折叠
7 4 1
8 5 2
9 6 3
代码:
1 #include<stdio.h> 2 #define N 5 //矩阵的阶数 3 4 /*交换两个变量值*/ 5 void swap(int* a,int* b) { 6 int temp = *a; 7 *a = *b; 8 *b = temp; 9 } 10 /*顺时针旋转矩阵90度*/ 11 void xuanzhuan(int a[][N]) {//只写列N,不要写行N 12 13 /*上下颠倒*/ 14 int i = 0; 15 int j = N - 1; 16 17 while(i < j) { 18 int temp; 19 20 for(int k = 0;k <= N-1;++k) 21 swap(&a[i][k],&a[j][k]); 22 23 ++i; 24 --j; 25 } 26 27 /*对角线翻转*/ 28 for(int k = 0;k < N-1;++k) 29 for(i = k;i <= N-1;++i) 30 swap(&a[k][i],&a[i][k]); 31 } 32 33 int main() { 34 int a[N][N] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; 35 xuanzhuan(a);//传参时,只写二维数组的基地址,不要带括号 36 for(int i = 0;i<N;++i) { 37 for(int j = 0;j<N;++j) { 38 printf("%2d ",a[i][j]); 39 } 40 printf("\n"); 41 } 42 43 44 return 0; 45 }