順列と組み合わせのアルゴリズムに関する質問です。いくつかのアイデアから始めましょう。

WBOY
リリース: 2016-06-13 12:59:07
オリジナル
968 人が閲覧しました

順列と組み合わせのアルゴリズムの問​​題です。
私は中学校で 1 2 3 4 5 6 の順列と組み合わせで 720 個の異なる文字列を形成できることを学びました
。 ここでは大まかな実装方法を書いています。例は1~6です。 専門家にアドバイスをいただければ幸いです
$j=0;
for($i=123456;$i $box=array();

$ge =$i%10;
if($ge>6 || $ge==0){
続行;
}
$box[]=$ge;
$shi = intval($i/10)%10;
if($shi>6 || $shi ==0){
続行;
}
$box[]=$shi;
$bai = intval($i/100)%10;
if($bai>6 || $bai ==0){
続行;
}
$box[]=$bai;
$qian = intval($i/1000)%10;
if($qian>6 || $qian ==0){
続行;
}
$box[]=$qian;
$wan = intval($i/10000)%10;
if($wan>6 || $wan ==0){
続行;
}
$box[]=$wan;
$shiwan = intval($i/100000);
if($shiwan>6 || $shiwan ==0){
続行;
}
$box[]=$shiwan;
//エコーカウント(array_unique($box));
//エコー '
';
//var_dump(array_unique($box));
//エコー '
';
if(count(array_unique($box))!=6){
続行;
}

if($j%10==0){
echo "
";
}
$j++;
echo ' ',$i,' ';
}
echo "
";
echo "合計{$j}";

-----解決策---------

$a = perm(array(1,2,3,4,5,6));<br />
echo count($a);<br />
//print_r($a);<br />
<br />
function perm($list, $k=0, $m=0) {     <br />
  if(! $m) $m = count($list) - 1; <br />
  $r = array();    <br />
  if($k >= $m) {          <br />
    $r[] = join('', $list);         <br />
  }else {         <br />
    for($i = $k; $i <= $m; $i++) {             <br />
      list($list[$k], $list[$i]) = array($list[$i], $list[$k]);<br />
      $r = array_merge($r, perm($list, $k + 1, $m));             <br />
      list($list[$k], $list[$i]) = array($list[$i], $list[$k]);<br />
    }<br />
  }<br />
  return $r;<br />
}
ログイン後にコピー
720

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!