【发布时间】:2014-05-02 23:37:45
【问题描述】:
我需要用随机数 1-5 填充一个二维数组。必须使用以纳秒为单位的系统时间生成随机数。虽然有点复杂
假设数组有 5 行 5 列,这将显示为
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
然后(我在想)一个 for 循环将用于生成 1-5 来填充数组。数组必须从前面(第 1 行)到后面填充。复杂之处在于,第一次将元素放入数组中时,它是 001。所以如果第一个随机数是 1,则数组看起来像
001 ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
然后假设下一个数字是 4(第二次将元素放入数组中)。这显示为
001 002 002 002 002
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
但是,如果这个数字是 5,那就不合适了。所有元素必须连续放置。如果它是 5,则数组需要是
001 ... ... ... ...
002 002 002 002 002
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
如果下一个数字是 4,则在 001 旁边填写 003。
实际阵列为 20x20。我完全不知道如何做到这一点。我并不完全依赖stackoverflow来寻求帮助,我自己尝试过。
该问题需要以非具体的方式解决,以便在某些情况下更改程序可以轻松编辑,例如更改数组维度。所以我有
int 随机数;
int dim1 = 20;
int dim2 = 20;
int[][] 剧院 = 新 int[dim1][dim2];
随机 r = new Random(System.nanoTime);
我需要一些关于 r.nextInt(5) +1; 我想,但我不知道该放在哪里。
【问题讨论】:
-
这个问题是否应该模拟计算机中的内存碎片?
-
目的是模拟剧院座位,所以有 20 排,每排 20 个座位,人们喜欢坐在离舞台最近的一排,但要票的人必须并排坐,你可以'不要转到下一行。
-
好的,我为这个问题写了一些示例代码。检查这是否可行
-
这似乎是bin packing problem 的一个例子。研究解决这个问题的方法。
-
既然我相当肯定这是一个家庭作业问题,我将给你建议而不是代码。保留一个单独的一维数组来存储每行中有多少占用的值。该值既可用于检查那里是否有足够的空间放置,也可用于知道从哪里开始放置值(如果有)。