-4

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

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

需要输出:

在此处输入图像描述

4

3 回答 3

2

这很简单:

1-读取一维数组中的值

2-确保数组的长度为16

3-创建一个二维数组

4- 在 For 循环中遍历一维数组

5-使用嵌套的for循环,将值从一维数组存储到二维数组

于 2013-08-30T09:35:36.290 回答
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;
    }
}

我省略了右下三角形;考虑到这一点,应该很容易做到这一点。

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

于 2013-08-30T09:44:20.687 回答