【发布时间】:2023-03-23 14:37:01
【问题描述】:
我的一个学生问我这种关于 C++ 数组的作业。这对我来说似乎很有趣,因此,虽然我已经解决了这个问题,但我想与您分享我的解决方案并了解其他变体和意见。问题如下:
问题 给定一个二维动态二次矩阵(数组)A(nxn)。要求将数组逆时针旋转 90 度,即旋转后 A[1,1] 字段应包含 A[1,n] 的值,A[1,n] 字段应包含A[n,n]。 并且还要求在解决此问题时不要使用任何其他数组。
我的解决方案
我已告诉学生执行以下操作(将示意性地表示步骤):
我建议定义一个类,该类作为其成员,将具有 2D 数组。并定义一个操作,当用户请求 A[i,j] 元素时,该操作将返回对 A[j,n+1-i] 元素的引用。简而言之,我建议为数组创建一个包装器,并通过包装器按数组操作。
【问题讨论】:
-
您的解决方案实际上并不能解决问题。您只是为每个查询返回正确的元素,但实际上并没有像问题要求的那样旋转它。为一个有趣的问题 +1。
-
@IVlad:实际上,解决问题只是一个观点。您可以非常确定 matlab 之类的程序是如何实现矩阵转置的,只使用状态和适当的 getter,没有真正的转换。当然,我怀疑我的老师会在考试中接受这个答案:D。
-
注意!!!所有这些解决方案都使用一个新数组!解决方案应该是不使用新数组。
-
@nikhil 不用可怜! :) 我已经告诉他们正确的解决方案,当然!您可能会同情学生,他们的老师提出了解决方法并通过了该问题,而没有返回更好的解决方案;)
-
我很感激您确实在寻找更好的解决方案,我也无意造成任何人身伤害。将删除我的评论。对此感到抱歉。