昨天,做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);
?>