voidtrans_x(int arr[],int m,int n){
for(int i =0; i < m;++i){
for(int j = n -1; j >=0;--j){
printf("%d ", arr[i * n + j]);}printf("\n");}}voidtrans_y(int arr[],int m,int n){
for(int i = m -1; i >=0;--i){
for(int j =0; j < n;++j){
printf("%d ", arr[i * n + j]);}printf("\n");}}
这个很简单,左右翻转,行的控制条件不变,列逆序输出,上下翻转同理
2.左右旋转
voidspin_left(int arr[],int m,int n){
for(int i =0; i < n;++i){
int j;for(j =0; j < m;++j){
printf("%d ", arr[j * n +(n - i -1)]);}printf("\n");}}voidspin_right(int arr[],int m,int n){
for(int i =0; i < n;++i){
int j;for(j =0; j < m;++j){
printf("%d ", arr[(m - j -1)* n + i]);}printf("\n");}}
旋转后,m 行 n 列的矩阵转成 n 行 m 列,因此行列的 n m 控制条件交换
以右转为例,原本第 j 行的数据转成第 m - j - 1 列,第 i 列的数据转成第 i 行, 因此 arr[ i ][ j ] 右转后成为 arr[ m - i - 1 ][ j ] ,加上一维数组控制下标就成为 (m - i - 1) * n + j ,n m 调转后就成了 (m - j - 1) * n + i
3.螺旋
intget_loop(int m,int n){
if(m <3|| n <3){
return1;}else{
returnget_loop(m -2, n -2)+1;}}voidtrans_spiral(constint arr[],int m,int n){
int loop_times =0, index