我尝试了很多,但没有解决方案。我必须将长度为 16 的 1d 数组转换为 4x4 2d 数组,其中元素在 java 中对角放置
例如。一维数组作为输入:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
需要输出:
我尝试了很多,但没有解决方案。我必须将长度为 16 的 1d 数组转换为 4x4 2d 数组,其中元素在 java 中对角放置
例如。一维数组作为输入:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
需要输出:
这很简单:
1-读取一维数组中的值
2-确保数组的长度为16
3-创建一个二维数组
4- 在 For 循环中遍历一维数组
5-使用嵌套的for循环,将值从一维数组存储到二维数组
啊..好问题,n x n
问题:
int i = 0;
for (int diagonal_length = 1; diagonal_length <= n; ++diagonal_length) {
for (int j = 0; j < diagonal_length; j++) {
out[diagonal_length - j - 1][j] = in[i];
++i;
}
}
我省略了右下三角形;考虑到这一点,应该很容易做到这一点。
像这样的东西(伪代码;只是给你一些随机的想法;我没有测试它;我认为它有效,但可能包含一些错误):
input = array[n * m];
output = array[m][n];
var i = 0;
var x = 0;
var y = 0;
while (i < array.length) {
if (x < n && y < m)
output[y][x] = input[i++];
if (y-- == 0) { // we're already at the "top"
y = x + 1; // move to the next row
x = 0; // reset the column
}
}
请注意,这不是最有效的方法,但这应该有效。
重要的是,如果这是一些家庭作业: 虽然 Stackoverflow 旨在回答此类问题,但您应该始终提供一些最少的代码来向其他人展示您尝试过的内容。通过这种方式,我们可能会告诉您您在哪里犯了错误。不要让别人为你编写所有代码,因为你不会从中学习。因此,我强烈建议您尝试上面的代码,但前提是您能够理解实际发生的情况。一旦你这样做了,你就可以开始自己实现它,只看你是否被卡住了。