2014-08-31 58 views
-5

我有四個插槽。每個插槽可以是0或1.我如何讓循環獲得所有可能的組合?我怎麼解決這個問題?算法得到所有可能的組合

這裏的背景:

在數據庫表中,有四個字段(查看,創建,編輯,刪除)。每個字段可以是0或1.我希望保存所有可能的組合。

+0

答案是16,因爲它是2^4。或者你的意思是讓它顯示每個組合? – asimes 2014-08-31 16:39:33

+0

以二進制從0到15進行計數。每個數字將對應一個組合。 – 2014-08-31 16:44:48

+0

我只是不知道如何處理二進制計數到15時的循環。是的,我打算顯示結果,然後將每個組合插入到數據庫表中。 – 2014-08-31 17:13:19

回答

3

你可以有4個嵌套循環來解決:

for ($a=0; $a<=1; $a++) { 
    for ($b=0; $b<=1; $b++) { 
     for ($c=0; $c<=1; $c++) { 
      for ($d=0; $d<=1; $d++) { 
       echo "$a $b $c $d\n"; 
      } 
     } 
    } 
} 

這產生了:

0 0 0 0 
0 0 0 1 
... 
1 1 1 0 
1 1 1 1 

或者,你可以只提取數字的二進制數字在[0,16)範圍:

for ($i=0; $i<16; $i++) { 
    $a = ($i & 8) ? 1 : 0; 
    $b = ($i & 4) ? 1 : 0; 
    $c = ($i & 2) ? 1 : 0; 
    $d = ($i & 1) ? 1 : 0; 
    echo "$a $b $c $d\n"; 
}