我尝试了很多,但没有解决方案。我必须将长度为16的1d数组转换为4x4 2d数组,并在java中对角放置元素
例如。 1d数组作为输入:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
需要输出:
答案 0 :(得分:2)
这很简单:
1 - 读取一维数组中的值
2-确保数组长度为16
3-创建一个二维数组
4-在For循环中横切一维数组
5-使用Nested for循环,将值从一个维数组存储到二维数组
答案 1 :(得分:1)
啊......好问题,对于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;
}
}
我遗漏了右下角的三角形;应该很容易做到这一点。
答案 2 :(得分:0)
像这样的东西(伪代码;只是为了给你一些随机的想法;我没有测试它;我认为它有效,但可能存在一些错误):
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旨在回答这些问题,但您应该始终提供一些最小的代码来向其他人展示您尝试过的内容。通过这种方式,我们可以告诉你你在哪里犯了一些错误。不要让别人为你编写所有代码,因为你不会从中学习。因此,我强烈建议您尝试上面的代码,但前提是您能够理解实际发生的事情。一旦你这样做,你就可以自己开始实现它,只看你被卡住了。