Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon d'implémenter le problème Joseph Ring en PHP

Explication détaillée de la façon d'implémenter le problème Joseph Ring en PHP

jacklove
jackloveoriginal
2018-07-06 17:53:172016parcourir

Cet article présente principalement la méthode de réalisation du problème de l'anneau Joseph en PHP et analyse les techniques de fonctionnement pertinentes de PHP utilisant des boucles et la récursivité pour réaliser le problème de l'anneau Joseph sous forme d'exemples. Les amis dans le besoin peuvent se référer à ce qui suit.

Les exemples de cet article sont expliqués. Une méthode pour implémenter le problème de l'anneau Joseph en PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1 Aperçu

Tout d'abord, jetons un coup d'œil à plus. Descriptions courantes des problèmes de l'anneau de Joseph sur Internet : L'anneau de Joseph (problème de Joseph) est un problème d'application mathématique : on sait que n personnes (représentées respectivement par les nombres 1, 2, 3...n) sont assises autour d'une table ronde. Commencez à compter à partir de la personne numérotée k, et la personne qui compte jusqu'à m sort de la file d'attente ; la personne suivante commence à compter à partir de 1, et la personne qui compte jusqu'à m sort à nouveau de la file d'attente, répétez ce schéma jusqu'au tour suivant ; table Tout le monde est sorti. Habituellement, lors de la résolution de ce type de problème, nous le numérotons de 0 à n-1, et le résultat final + 1 est la solution au problème d'origine.

2. Code d'implémentation

1. 🎜>

Résultat de l'exécution :

function circle($arr,$idx,$k){
  for($i=0;$i<$idx;$i++){
    $tmp = array_shift($arr);
    array_push($arr,$tmp);
  }
  $j = 1;
  while(count($arr) > 0){
    $tmp = array_shift($arr);
    if($j++%$k == 0){
      echo $tmp."\n";
    }else{
      array_push($arr,$tmp);
    }
  }
}
$arr = array(1,2,3,4,5,6,7,8,9,10,11,12);
$idx = 3;
$k = 4;
circle($arr,$idx,$k);

2. Récursivité

7 11 3 8 1 6 2 10 9 12 5 4

Résultats d'exécution :

function circle($arr,$idx,$k){
  $len = count($arr);
  $i = 1;
  if($len == 1){
    echo $arr[0]."\n";
    return ;
  } else {
    while($i++ < $k){
      $idx++;
      $idx = $idx%$len;
    }
    echo $arr[$idx]."\n";
    array_splice($arr,$idx,1);
    circle($arr,$idx,$k);
  }
}
$arr = [1,2,3,4,5,6,7,8,9,10,11,12];
$idx = 3;
$k = 4;
circle($arr,$idx,$k);

Articles qui pourraient vous intéresser :
7 11 3 8 1 6 2 10 9 12 5 4

Explication de la méthode d'utilisation de Passport pour implémenter l'authentification Auth dans Laravel 5.5

Outil d'optimisation des performances en PHP que vous pouvez ignorer : lié au générateur contenu

Implémentation détaillée du chargement automatique du compositeur dans le framework Laravel


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn