我正在编写一个程序,涉及将一个数字放入7x7网格的每个单元格中。有56个数字,随机选择,不得重复。
最终结果应该是7x7网格,其中每个单元格包含1到56之间的整数,没有两个单元格包含相同的数字。这样做最有效的方法是什么?
额外的话: 我尝试创建一个for x {for y {}},它将逐个单元格通过网格,并添加一个随机数1-56。然后,它将检查56个插槽的数组以查看该数字是否已被使用,并相应地重新滚动或接受该数字,然后标记该数组以将该数字标记为正在使用。出于某种原因,我无法让它工作,这似乎是一个糟糕的解决方案。我取消了它,而是每次运行x {for y {}}运行一秒钟,并在批准或拒绝之前逐个单元格检查整个网格单元格。这也没有用,而且看起来很笨拙,所以我也把它废弃了。答案 0 :(得分:1)
创建一个长度为56的数组,填充数字1到56
使用Fisher-Yates shuffle创建一个无偏的随机数组
从数组中依次填充7x7矩阵(行或列顺序)。
答案 1 :(得分:1)
您可以生成1:56的数组,然后随机播放,然后选出前49个元素。
$arr = range(1,56);
shuffle($arr);
$vals = array_slice($arr, 0, 49); //49 because grid is 7x7
// put $vals in grid.
答案 2 :(得分:0)
答案 3 :(得分:0)
创建一个包含所有需要的数字的数组,并将其随机播放。
$fullGrid = range($min, $max);
shuffle($fullGrid);
现在您需要做的只是直观地显示$fullGrid
数组。