2012-01-24 76 views
2

我正在寫一個程序,涉及將一個數字放入7x7網格的每個單元格中。有56個數字,從隨機選擇,並且不能有重複。在隨機矩陣中消除重複

最終結果應該是一個7x7網格,其中每個單元格包含從1到56的整數,並且沒有兩個單元格包含相同的數字。做這件事最有效的方法是什麼?

額外的詞: 我試着創建一個for x {for y {}},它將通過單元格通過網格單元格並添加一個隨機數字1-56。然後,它會檢查一個56槽陣列,看看該號碼是否已被使用,並相應地重新推出或接受該號碼,然後標記該陣列以將該號碼標記爲正在使用中。出於某種原因,我無法實現它的工作,這似乎是一個不好的解決方案。我放棄了它,而是每次都運行x {for y {}},並在批准或拒絕之前檢查整個網格單元格中的滾動數字。這也不是很有效,而且看起來很笨拙,所以我也放棄了。

回答

0
  • 創建包含編號1 56個元件的陣列,以56
  • 生成1之間和陣列
  • 的長度的隨機數選擇數該索引處和從陣列
  • 刪除它
  • 泡沫,漂洗,重複
0

創建所需要的所有數字數組,將它洗。

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

現在,所有你需要做的是直觀地顯示$fullGrid陣列。

More on the php shuffle function.

1
  1. 創建長度56的陣列,填充有數字1至56

  2. 使用費雪耶茨洗牌創建一個無偏的,隨機陣列

  3. 填充的7x7矩陣(行或列順序)。

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.