|
|
|
ขอคำแนะนำเกี่ยวกับการเขียนสลับตัวเลขโดยที่ไม่ซ้ำกันคับ |
|
|
|
|
|
|
|
ยังนึกไม่ออกเลยว่าจะใช้คำสั่งอะไรดี ??? รอท่านผู้รู้มาตอบ.... อยากรู้เหมือนกันครับ (เหมือนหวยเลย อิอิอิ)
|
|
|
|
|
Date :
2012-05-14 03:09:27 |
By :
superdong |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เคยเจอในกระทู้เก่า ๆ และมีคนเคยตอบไว้ด้วยครับ
|
|
|
|
|
Date :
2012-05-14 06:17:15 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก่อนอื่นต้องบอกว่าจำนวนของตัวเลขที่สลับแล้วไม่ซ้ำกันจะเท่ากับ n!
ผมใช้วิธีเขย่าอาร์เรย์ "shuffle" เพื่อให้มันสลับที่กัน ก็วนอยู่ในลูปไปเรื่อยๆ จนกว่าจะได้สมาชิกที่ไม่ซ้ำกัน
ภายใตเงื่อนไขว่าจำนวนสมาชิกจะไม่เกินกว่า n!
Code (PHP)
function factorial($n){
if($n==1) return $n;
else return $n*factorial($n-1);
}
$a =1234;
$_a = str_split($a);
$num= count($_a);
$ele_amnt = factorial($num);
$output = array();
while(count($output) < $ele_amnt){
shuffle($_a);
$justnumber = implode("",$_a);
if(!in_array( $justnumber , $output))
$output[] = $justnumber;
}
sort($output);
print_r($output);
|
|
|
|
|
Date :
2012-05-14 10:34:47 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณคับ คุณ Unidentifer
|
|
|
|
|
Date :
2012-05-14 23:50:13 |
By :
nomonboy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันใช้กับ input ที่เป็น เลขซ้ำเช่น 554 555 ไม่ได้ครับ
แก้ไงดี
|
|
|
|
|
Date :
2012-06-05 00:38:33 |
By :
feedblackho |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลอง PM ไปถามคุณ Unidentifer ดูครับ
|
|
|
|
|
Date :
2012-06-05 06:24:48 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมใช้วิธีนี้ครับ แต่โค้ดไม่สวย ลองดูนะครับ
Code (PHP)
<?php
$number = 123;
$a = substr("$number", -3, 1)."<br>";
$b = substr("$number", -2, 1)."<br>";
$c = substr("$number", -1)."<br>";
if(($a == $b)||($a == $c)||($b == $c)){
if($a == $b){
$n1 = $a.$a.$c;
$n2 = $a.$c.$a;
$n3 = $c.$a.$a;
}elseif($a == $c){
$n1 = $a.$b.$a;
$n2 = $a.$a.$b;
$n3 = $b.$a.$a;
}else{
$n1 = $a.$b.$b;
$n2 = $b.$b.$a;
$n3 = $b.$a.$b;
}
}else{
$n1 = $a.$b.$c;
$n2 = $a.$c.$b;
$n3 = $b.$a.$c;
$n4 = $b.$c.$a;
$n5 = $c.$a.$b;
$n6 = $c.$b.$a;
}
?>
|
ประวัติการแก้ไข 2012-08-04 14:19:22
|
|
|
|
Date :
2012-08-04 14:17:33 |
By :
cs013 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แจ่มครับ
|
|
|
|
|
Date :
2012-08-05 20:14:03 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอดีหา Code สลับเลขแบบที่คุณ Unidentifier ตอบไว้ครับ ผมเลยไปอ่านเรื่อง Factorial เพิ่มทำให้แก้ปัญหาตรง shuffle ได้ ตาม code ด้านล่างเลยครับ ต้องขอบคุณ คุณ Unidentifier ด้วยครับ ไม่งั้นผมไปต่อไม่เป็นจริงๆ
Code (PHP)
<?php
<?php
function permutation($_a, $buffer='', $delimiter='') {
$output = array();
$num = count($_a);
if ($num > 1) {
foreach ($_a as $key=>$val) {
$temp = $_a;
unset($temp[$key]);
sort($temp);
$return = permutation($temp, trim($buffer.$delimiter.$val, $delimiter), $delimiter);
if(is_array($return)) {
$output = array_merge($output, $return);
$output = array_unique($output);
}
else {
$output[] = $return;
}
}
return $output;
}
else {
return $buffer.$delimiter.$_a[0];
}
}
$a = 12345;
$_a = str_split($a);
$output = permutation($_a);
print_r($output);
|
ประวัติการแก้ไข 2016-08-08 01:04:18 2016-08-08 01:07:42 2016-08-08 09:31:41
|
|
|
|
Date :
2016-08-07 23:55:15 |
By :
kerb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รองแบบนี้ดูไหมครับ
Code (PHP)
<?php
function digit($c){
$rs=array(); $idx=pow($c,$c);
for($i=0; $i < $idx; $i++){
$t=''; $n=$i;
do{ $x = $n % $c; $n = floor($n / $c); $t = $x.$t;}while($n);
$u=array_unique(str_split($t=str_pad($t, $c, '0', STR_PAD_LEFT)));
if(count($u)==$c) $rs[]=$t;
}
return $rs;
}
$error = ''; $rs_num = array();
if(isset($_POST['key'])){
$c = count($_POST['key']);
if(count(array_unique($_POST['key'])) != $c){
$error = 'Duplicate key';
}else{
$rs=digit($c);
foreach($rs as $k=>$v){
$z=str_split($v); $rs_num[$k]='';
foreach($z as $n) $rs_num[$k] = $_POST['key'][$n] . $rs_num[$k];
}
sort($rs_num);
}
}
?>
<!doctype html>
<html>
<body>
<?=(count($rs_num)? 'result: <pre>'.implode('<br>',$rs_num).'</pre>' : '')?>
<?=($error? "Error: ".$error : '')?>
<form method="post" >
Key 1 <input type=text name="key[]" value="<?=(isset($_POST['key'][0])? $_POST['key'][0] : '')?>"><br>
Key 2 <input type=text name="key[]" value="<?=(isset($_POST['key'][1])? $_POST['key'][1] : '')?>"><br>
Key 3 <input type=text name="key[]" value="<?=(isset($_POST['key'][2])? $_POST['key'][2] : '')?>"><br>
Key 4 <input type=text name="key[]" value="<?=(isset($_POST['key'][3])? $_POST['key'][3] : '')?>"><br>
<button>Excute</button>
</form>
</body>
</html>
|
ประวัติการแก้ไข 2016-08-08 09:42:50
|
|
|
|
Date :
2016-08-08 09:38:42 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|