#include <stdio.h>
#define N 3
void convertMethod(int arr[N][N]);
void printMethod(int arr[N][N]);
int main()
{
int arr[N][N] = { {1,2,3},{4,5,6},{7,8,9} };
convertMethod(arr);
printMethod(arr);
system("pause");
return 0;
}
//二位数组的转置
// 1 2 3 1 4 7
// 4 5 6 转置为2 5 8
// 7 8 9 3 6 9
// 分析arr[0][0] arr[1][1] arr[2][2]不变
//arr[0][1]与arr[1][0] arr[0][2]与arr[2][0] arr[1][2]与arr[2][1]交换
void convertMethod(int arr[N][N])
{
//看起来思路没有问题 但实际上忽略了二重循环的影响
//举个例子 当i=2时 arr[2][0]与arr[0][2]又进行了交换 但是要知道早在i=0时 arr[0][2]与arr[2][0]就进行了交换
//思考实验下外层循环 i<N-1 i<N-2会怎么样
//for (int i = 0; i < N; i++)
//{
// for (int j = 0; j < N; j++)
// {
// int temp = arr[i][j];
// arr[i][j] = arr[j][i];
// arr[j][i] = temp;
// }
//}
//再重新仔细分析下 arr[0][1]与arr[1][0] arr[0][2]与arr[2][0] arr[1][2]与arr[2][1]
for (int i = 0; i < N; i++)
{
for (int j = i + 1; j < N; j++)
{
int temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
}
void printMethod(int arr[N][N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
printf("%d", arr[i][j]);
}
printf("\n");
}
}