2

我正在编写一个程序,该程序涉及将一个数字放入 7x7 网格的每个单元格中。有56个数字,随机选择,不能重复。

最终结果应该是一个 7x7 网格,其中每个单元格包含一个从 1 到 56 的整数,没有两个单元格包含相同的数字。这样做最有效的方法是什么?

额外的话:我尝试创建一个 for x{for y{}} ,它将逐个单元格地遍历网格并添加一个随机数 1-56。然后它会检查一个 56 槽的数组以查看该号码是否已被使用,并相应地重新滚动或接受该号码,然后标记该数组以将该号码标记为正在使用。由于某种原因,我无法让它工作,这似乎是一个糟糕的解决方案。我放弃了它,而是每次运行 x{for y{}} 一秒钟,并在批准或拒绝之前逐个单元格地检查整个网格中的滚动数字。这也不太奏效,而且看起来很笨拙,所以我也废弃了它。

4

4 回答 4

1
  1. 创建一个长度为 56 的数组,填充数字 1 到 56

  2. 使用 Fisher-Yates shuffle 创建无偏的随机数组

  3. 从数组中按顺序填充 7x7 矩阵(行或列顺序)。

于 2012-01-24T04:52:04.827 回答
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.
于 2012-01-24T04:55:05.597 回答
0
  • 创建一个由 56 个元素组成的数组,其中包含数字 1 到 56。
  • 生成一个介于 1 和数组长度之间的随机数
  • 选择该索引处的数字并将其从数组中删除
  • 起泡、冲洗、重复
于 2012-01-24T04:51:51.223 回答
0

创建一个包含所有需要的数字的数组,然后随机播放。

$fullGrid = range($min, $max);
shuffle($fullGrid);

现在您需要做的就是直观地显示$fullGrid数组。

更多关于 phpshuffle函数的信息。

于 2012-01-24T04:52:03.453 回答