2

7x7 グリッドの各セルに 1 つの数値を配置するプログラムを作成しています。無作為に選ばれた 56 個の数字があり、繰り返しがあってはなりません。

最終結果は、各セルに 1 から 56 までの整数が含まれ、2 つのセルに同じ番号が含まれていない 7x7 グリッドになるはずです。これを行う最も効率的な方法は何ですか?

余分な言葉: セルごとにグリッド セルを通過し、乱数 1-56 を追加する for x{for y{}} を作成しようとしました。次に、56 スロットの配列をチェックして、その番号が既に使用されているかどうかを確認し、それに応じて番号を再ロールするか受け入れるかのいずれかを行い、その番号を使用中としてマークするために配列にフラグを立てます。何らかの理由で、それを機能させることができず、悪い解決策のように思えました。私はそれを破棄し、代わりに毎回 for x{for y{}} を 1 秒間実行し、グリッド セル全体をセルごとに確認してから、承認または拒否しました。これもうまくいかず、扱いにくそうに見えたので、これも廃棄しました。

4

4 に答える 4

1
  1. 1から56までの数字で満たされた長さ56の配列を作成します

  2. フィッシャー-イェーツシャッフルを使用して、偏りのないランダム化された配列を作成します

  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

必要なすべての数で配列を作成し、それをシャッフルします。

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

$fullGridこれで、配列を視覚的に表示するだけで済みます。

phpshuffle関数の詳細。

于 2012-01-24T04:52:03.453 に答える
0
  • 1 から 56 までの数字を含む 56 要素の配列を作成します。
  • 1 と配列の長さの間の乱数を生成します
  • そのインデックスの番号を選択し、配列から削除します
  • 泡立てる、すすぐ、繰り返す
于 2012-01-24T04:51:51.223 に答える