(C语言)将4*4阶梯矩阵转置

#include <stdio.h>
#define N 4
void Transpose(int a[][N]) {   //这里是个易错点
int i,j,t;
for(i = 0; i < N - 1; ++i) {   //i从0到3 第一行到第四行
for(j = i + 1; j < N; ++j) {   //j从1,2,3,

t = a[i][j];
//不换的:(0,0)(1,1)(2,2)(3,3)对角线元素(1,0)(2,0)(2,1)(3,0),(3,1),(3,2),
//换的   (0,1)(0,2) (0,3),(1,2),(1,3),(2,3),
a[i][j] = a[j][i];
a[j][i] = t;
}
}
}
void Show(int a[][N]) {
int i,j;
for(i = 0; i < N; ++i) {
for(j = 0; j < N; ++j)
printf("%4d",a[i][j]);
printf("\n");//每输入一行,换个行
}
}
int main() {
int a[N][N] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
printf("转置前 :\n");
Show(a);
Transpose(a);
printf("转置后 :\n");
Show(a);
getchar();    //让程序停留在这一步,直到它从键盘接收到消息.

return 0;

}

经验之谈:

1.二维数组的形参,列元素个数需指出。

2.这个矩阵转置在一定程度上提高了时间复杂度。因为只处理了对角线以上的元素,这减小了成本的思维需刻意练习,不教条思维处理全部元素,费时费力。

如果你有更好的观点,在评论区留下你的看法。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值