[PHP] 공룡 조합(r종의 조합이냐, r종의 조합이냐)

16712 단어 PHP초보자

nCr와 재회


그립다.
정말 그리워요.
그냥 보고 있으면
고등학교 수학이라는 녀석이 나올 줄은 몰랐어.
페이즈를 풀면 조합이 필요할 때가 있어요.
비망록으로 7가지 중 10가지를 조합하거나 1부터 10까지의
조합을 원할 때 총결산을 하기로 했습니다.

2. 코드


공룡 일람표가 표시되면 드롭다운 단추와 라디오 단추를 통해 출력 항목을 선택하고'확인 단추'를 누르십시오.
숫자(1,2,3)에서 두 숫자의 조합은 (12,13,23)이다.
여기서 주의해야 할 것은 1위의 수치보다 큰 수치를 뒤에 만들면 된다는 것이다.
get_combi1에서 이 성질을 이용하여 제작합니다.
combi_php2.php

<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>組み合わせ</title>
<h1>組み合わせ</h1>

<?php   
  $array_dino=['Tyrannosaurus','Velociraptor','Stegosaurus','Indoraptor','IndominusRex','Triceratops','Brachiosaurus'];
 ?>
<form action="combi_php2.php" method="post">


<?php 
  echo "恐竜一覧:<br>";
  for($i=0;$i<count($array_dino);$i++){
    echo $array_dino[$i]."<br>";
  }

 ?>  

<select name="type_num">
  種類:
<?php   
  for($i=1;$i<count($array_dino);$i++){
    echo "<option>".$i."</option>";
  }
 ?>
</select>

<input type="radio" name="radio_d" value="all_combi" checked>総組み合わせ
<input type="radio" name="radio_d" value="combi">組み合わせ
<input type="submit" value="確定" name="btn2">
</form><br>




<?php 

  $dnum=isset($_POST['type_num'])?htmlspecialchars($_POST['type_num']):null;
  $input_num=count($array_dino);
  $flg=0;
  $arr_all_comb=[];
  $arr_comb2=[];
  for($i=0;$i<$input_num;$i++){
    $arr_all_comb[]=$i;
    $arr_comb2[]=$i; 
  }


  for($i=0;$i<$dnum-1;$i++){
    $str_join=join(" ",$arr_comb2);
    $retstr=get_combi1($input_num,$str_join);
    $arr_split=explode(" ",$retstr);
    $arr_comb2=[];
    for($j=0;$j<count($arr_split);$j++){
      //$i+1種類までの組み合わせ
      $arr_all_comb[]=$arr_split[$j];
      //$i+1種類の組み合わせ
      $arr_comb2[]=$arr_split[$j];
      //echo $arr_split[$j]."<br>";
    }
  }

  if(isset($_POST['btn2'])){
    if($_POST['radio_d'] == "all_combi"){
      echo $dnum."種類までの組み合わせを表示<br>";
      for($i=0;$i<count($arr_all_comb);$i++){
        //echo $arr_all_comb[$i]."<br>";
        echo replace_word($arr_all_comb[$i],$array_dino)."<br>";

      }
    }else{
      echo $dnum."種類の組み合わせを表示<br>";

      for($i=0;$i<count($arr_comb2);$i++){
        //echo $arr_comb2[$i]."<br>";
        echo replace_word($arr_comb2[$i],$array_dino)."<br>";
      }
    }  
  }


  function get_combi1($n,$str_j){

    $tmp_ar=[];
    $arr_s=explode(" ",$str_j);

    for($i=0;$i<count($arr_s);$i++){
      //$num=substr($arr_s[$i],strlen($arr_s[$i])-1,1);
      $num_arr=explode(",",$arr_s[$i]);
      //一番最後の要素
      $num0=$num_arr[count($num_arr)-1];
      //echo $num0."<br>";
      for($j=$num0+1;$j<$n;$j++){
        $retstr=$arr_s[$i].",".$j;
        $tmp_ar[]=$retstr;
      }
    }
    $join_str=join(" ",$tmp_ar);
    //echo $join_str."<br>";
    return $join_str;
  }


  function replace_word($str0,$arr_rep){
    $ar_in=explode(",",$str0);
    $tmp_ar=[];
    for($i=0;$i<count($ar_in);$i++){
      for($j=0;$j<count($arr_rep);$j++){
        if($ar_in[$i] == $j){
          $tmp_ar[]=$arr_rep[$j];

          break;
        }
      }
    }  
    return join(",",$tmp_ar);
  }
 ?>  
</html>

실행 예


조합 선택 시 (4 가지)



어느 수까지의 조합(총 조합)을 선택할 때



좋은 웹페이지 즐겨찾기