<?php // 16桁の最大数なので、10は外枠に来る // 最も最大の数ということなので、外枠は、6,7,8,9,10 を使えれば望ましい。 /* 0,5,6 1,6,7 2,7,8 3,8,9 4,9,5 合計が一致するようにする。0,1,2,3,4 は 0が一番小さい値になるように。 */ $array1 = array(); $array2 = array(10=>10,9=>9,8=>8,7=>7,6=>6,5=>5,4=>4,3=>3,2=>2,1=>1); calc($array1,$array2); function calc($array1,$array2) { foreach($array2 as $v) { unset($array2[$v]); $array1[] = $v; if(count($array2) != 0) { if(count($array1) == 1) { calc($array1,$array2); } else if(count($array1) == 2 and $array1[0] < $array1[1]) { calc($array1,$array2); } else if(count($array1) == 3 and $array1[0] < $array1[2]) { calc($array1,$array2); } else if(count($array1) == 4 and $array1[0] < $array1[3]) { calc($array1,$array2); } else if(count($array1) == 5 and $array1[0] < $array1[4]) { calc($array1,$array2); } else if(count($array1) >= 6) { calc($array1,$array2); } } else { if($array1[0]+$array1[5]+$array1[6] == $array1[1]+$array1[6]+$array1[7]){ if($array1[0]+$array1[5]+$array1[6] == $array1[2]+$array1[7]+$array1[8]){ if($array1[0]+$array1[5]+$array1[6] == $array1[3]+$array1[8]+$array1[9]){ if($array1[0]+$array1[5]+$array1[6] == $array1[4]+$array1[9]+$array1[5]){ echo $array1[0].$array1[5].$array1[6].$array1[1].$array1[6].$array1[7].$array1[2].$array1[7].$array1[8].$array1[3].$array1[8].$array1[9].$array1[4].$array1[9].$array1[5]."\n"; }}}} } $array2[$v] = $v; array_pop($array1); } } ?>