0

特定の数字を使用して、指定された桁数の可能なすべての数字を生成するにはどうすればよいですか?

したがって、基本的には、たとえば数字 ['1','2','3'] のみを使用して 6 桁の数字を使用したいと考えています。再帰のいくつかの方法を試しましたが、「|」の区切り記号を追加するという他の複雑さのために、正しく機能させることができません。各2桁の間に。したがって、リストは次のようになります。

11|11|11
11|11|12
11|11|13
11|11|21
11|11|22
11|11|23

など..誰かが私を正しい方向に向けることができれば幸いです。また、各組み合わせを MySQL データベースにダンプする方法も素晴らしいでしょう。

4

2 に答える 2

2

これは、あなたの質問に対する大幅に更新された回答です(最初はこの回答から更新されました] 1):

function findPermutations($arr, $arrLen, $size, $perArr = array(), $pos = 0, &$found = array()) {
   if ($size==$pos) { //if $pos reach $size then we have found one permutation
      $found[] = vsprintf("%s%s|%s%s|%s%s", $perArr);
      return;
   }
   for ($i=0; $i<$arrLen; $i++) {

      $perArr[$pos] = $arr[$i]; //put i'th char in current position
      //The recursive call that move to next position with $pos+1
      findPermutations($arr, $arrLen, $size, $perArr, $pos+1, $found); 
   }
   return $found;
}

$permutations = array();
$letters = array('1','2','3');
$max_length = 6;

$permutations = findPermutations($letters, count($letters), $max_length);

for($i = 0; $i < count($permutations); $i++) {
    print ($permutations[$i].'<br/>');
}

これが私がやっていることです。参照によって呼び出される空の配列を渡し、$permutations新しい順列を見つけたら、それらを追加します。関数findPermutations()が完了すると、反復または挿入できるすべての順列の配列が得られます。vsprintfを使用しているフォーマットを取得するために、データの配列を渡してフォーマットを適用できます (この場合は%s%s|%s%s|%s%s)。最後に、デフォルトの引数値を使用して、この関数の呼び出しをよりクリーンにしています。

于 2013-03-29T17:21:14.157 に答える
0

このようなことを意味しますか?

$letters='123'; // add other numbers

for($i=0;$i<3;$i++) { //generate 3 pairs
  $pairs[]=$letters[rand(0,2)] . $letters[rand(0,2)];
}
//then join them together
$finalstring=implode('-',$pairs);
于 2013-03-29T17:15:15.100 に答える