8个盘子摆放3颗苹果的问题

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注