การทำงานจะเป็นการนำจำนวนเลขมาหาความยาว เพื่อหา factorial ของเลขชุดนั้นๆ จากนั้นก็นำมาคำนวณหาจำนวนเลขซ้ำเพื่อลดจำนวนผลลัพธ์ที่ต้องการ
<?php
// หาจำนวน factorial ของตัวเลขที่กำหนด
function factorial_of_number($n){
$x = 1;
for($i=1;$i<=$n-1;$i++)
{
$x *= ($i+1);
}
return $x;
}
// สร้างข้อมูล Array ตามจำนวน factorial ที่ไม่ซ้ำกัน
function generate_factorial_number($number){
$num_arr = str_split($number); // แยกตัวเลขแต่ละตัวให้เป็น Array 1 ชุด
$num_len = count($num_arr); // นับจำนวนตัวเลข
$factorial = factorial_of_number($num_len); // หาค่า factorial
$operator = $factorial / $num_len; //<-- สูตรสำหรับใช้ คำนวณจำนวนไม่ซ้ำ
$count_group = count(array_unique($num_arr)); //<-- นับจำนวนตัวเลขที่ ไม่ซ้ำกัน
$case = $count_group - 1; // <-- หาสูตรที่ใช้คำนวณจำนวน factorial ไม่ซ้ำกัน
if($count_group == $num_len){ // ถ้าจำนวนไม่ซ้ำกันเลข
$loop = $num_len * $operator;
}else{
switch($case){
case 0:
$loop = 1; // จำนวนซ้ำกันทุกตัว
break;
case 1:
$loop = $num_len; // จำนวนซ้ำกัน จนเหลือ 1 ตัว
break;
default:
$loop = ($num_len - $case) * $operator; // จำนวนซ้ำกันบางตัว
break;
}
}
// echo '<hr/>Number = ', $number;
// echo '<br/>Factorial = ', $factorial;
// echo '<br/>Operator = ', $operator;
// echo '<br/>Case : ', $case;
// echo '<br/>Loop : ' . $loop;
// echo '<hr/>';
$arr_number = array();
while(count($arr_number) < $loop){
shuffle($num_arr); // สุ่มตำแหน่งใหม่
$new_num = implode("", $num_arr); //นำ Array ที่สุ่มมารวมกันเป็นตัวเลขใหม่
if(!in_array($new_num , $arr_number)){ // ตรวจสอบ ถ้ายังไม่เก็บไว้ถึงจะเพิ่มเข้าไป
$arr_number[] = $new_num; // เก็บตัวเลขใหม่ที่ได้ในตัวแปรอาร์เรย์ $arr_number
}
}
sort($arr_number);
return $arr_number;
}
// กำหนดตัวเลขที่ต้องการ
$number = 1442;
$output = generate_factorial_number($number);
// แสดงตัวอย่างข้อมูลผลลัพธ์
echo "<h3>Factorial ที่ไม่ซ้ำกันของเลข $number มีจำนวนทั้งสิ้น " . count($output) . " ตัว</h3>";
echo '<pre>';
print_r($output);
echo '</pre>';
?>
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ความคิดเห็น
แสดงความคิดเห็น