将1d数组转换为2d,对角放置元素

时间:2013-08-30 09:28:53

标签: java

我尝试了很多,但没有解决方案。我必须将长度为16的1d数组转换为4x4 2d数组,并在java中对角放置元素

例如。 1d数组作为输入:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

需要输出:

enter image description here

3 个答案:

答案 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旨在回答这些问题,但您应该始终提供一些最小的代码来向其他人展示您尝试过的内容。通过这种方式,我们可以告诉你你在哪里犯了一些错误。不要让别人为你编写所有代码,因为你不会从中学习。因此,我强烈建议您尝试上面的代码,但前提是您能够理解实际发生的事情。一旦你这样做,你就可以自己开始实现它,只看你被卡住了。