作业帮 > 综合 > 作业

求助:C语言用一段内存(一维的)保存一个矩阵,把这个矩阵转置,不使用另一段内存

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/01 06:43:53
求助:C语言用一段内存(一维的)保存一个矩阵,把这个矩阵转置,不使用另一段内存
就是不能在开辟一段内存,否则很容易,要直接在自己身上两两交换,比如
012
345
原来是012345,变成031425,要找一个,对任意m*n的矩阵都适用的交换流程,
悬赏可以加
不能在开辟一段内存tangram_guid_1356919761478

那么你一维数组放在哪里?
因为矩阵肯定是申请好的……

而且你这里的规则不是很复杂

for (i = 0, length = 0; i < n; i ++)
{
for ( j = 0; j < m ; j ++)
{
out[length ++ ] = in [j][i];
}
}

这样就可以实现了

但是我不太能理解的是,如果你的out没有申请,那么你要放在哪里?
再问: 当然是申请好的,我现在的问题是,交换流程,比如我举得例子012 345 可以这样交换 第一轮;1和3交换,2和4交换,结果是034125 第二轮 4和1交换 结果就是031425 现在要的是 对任意m* n的矩阵,交换轮数及每轮的交换法则,和m,n之间的关系和规律
再答: sorry, 矩阵太小了,二维的话,我只能看到你是为了拉成一条矩阵,就是我写的那样的规律 如果你要扩展,那么至少还要多出一行,否则没有办法推断的 我现在看到的是 原矩阵 0 [0, 0] [0, 1] .. [0, n] m [m, 0] [m, 1] .. [m, n] 变形后 0 [0, 0] [1, 0] ... [m, 0] 1 [1, 0] [1, 1] ... [m, 1] n [n, 0] [n, 1] .... 你这种变形,感觉上像是矩阵旋转,你要做矩阵旋转吗?
再问: 转置呀,维数在输出的时候可以设置,不用担心,现在就是要一个交换的法则,通用的
再答: 以前有写过,不过是3维的,后来发现directx有矩阵旋转的函数,就没有再弄了 http://zh.wikipedia.org/wiki/%E5%8F%98%E6%8D%A2%E7%9F%A9%E9%98%B5#.E6.97.8B.E8.BD.AC 你自己看一下,因为是90度的旋转,所以应该是很好求的
再问: 额,算了我看看另一题随机发牌,主要网上太多方法又复杂,循环次数又多,你不说写过能不能想起来?不能的话算了 我已经晕了,算了给你吧....这个东西还要角度,,,,更加不好弄