昨天,做JAVA的同事给我出了一道程序题目:一排8个盘子,摆放3颗苹果,每个盘子只能放一颗苹果,问有多少中摆法。
其实也就是一个逻辑题了,但是要求用程序写出来,或许是JAVA做起来比较复杂,同事用了4个小时才做出来,我用PHP写用了半个多小时就完成了。
我的思路比较简单:三层循环,第一层,摆第一个苹果,第二层摆第二个苹果,第三层第三个苹果,这时候判断是否在之前有过同样的情况,如果没有则计入数组。
代码如下:
<?php $rs = array(); for($a=1;$a<=8;$a++){ for($n=1;$n<=8;$n++){ //苹果显示“O”,盘子显示“+” $num1 .= $n==$a ? "O" :"+"; } for($b=1;$b<=8;$b++){ if($b !== $a){ //将“盘子”替换成“苹果” $num2 = substr_replace($num1 , "O", $b-1, 1); for($c=1;$c<=8;$c++){ if($c !== $a & $c !== $b){ $num3 = substr_replace($num2 , "O", $c-1, 1); //判断数组中是否出现相同的“摆法”,如果没有,加入数组 if(!in_array($num3, $rs)){ $rs[] = $num3; } } } } } unset($num1); } print_r($rs); ?>