1823. Trouvez le gagnant du jeu circulaire
Moyen
Il y a n amis qui jouent à un jeu. Les amis sont assis en cercle et sont numérotés de 1 à n dans dans l'ordre des aiguilles d'une montre. Plus formellement, se déplacer dans le sens des aiguilles d'une montre à partir du ième ami vous amène au (i+1)ème ami pour 1 <= i < n, et en vous déplaçant dans le sens des aiguilles d'une montre à partir du nième ami vous amène au 1er ami.
Les règles du jeu sont les suivantes :
-
Commencerau 1erami.
- Comptez les k amis suivants dans le sens des aiguilles d'une montre y compris l'ami avec lequel vous avez commencé. Le décompte fait le tour du cercle et peut compter certains amis plus d'une fois.
- Le dernier ami que vous avez compté quitte le cercle et perd la partie.
- S'il y a encore plus d'un ami dans le cercle, revenez à l'étape 2 en commençant de l'ami immédiatement dans le sens des aiguilles d'une montre de l'ami qui vient de perdre et répétez.
- Sinon, le dernier ami du cercle remporte la partie.
Étant donné le nombre d'amis, n, et un entier k, renvoyez le gagnant du jeu.
Exemple 1 :
-
Entrée : n = 5, k = 2
-
Sortie : 3
-
Explication : Voici les étapes du jeu :
- Commencez par l'ami 1.
- Comptez 2 amis dans le sens des aiguilles d'une montre, qui sont les amis 1 et 2.
- L'ami 2 quitte le cercle. Le prochain départ est l'ami 3.
- Comptez 2 amis dans le sens des aiguilles d'une montre, qui sont les amis 3 et 4.
- L'ami 4 quitte le cercle. Le prochain départ est l'ami 5.
- Comptez 2 amis dans le sens des aiguilles d'une montre, qui sont les amis 5 et 1.
- L'ami 1 quitte le cercle. Le prochain départ est l'ami 3.
- Comptez 2 amis dans le sens des aiguilles d'une montre, qui sont les amis 3 et 5.
- L'ami 5 quitte le cercle. Il ne reste plus que l'ami 3, il est donc le gagnant.
Exemple 2 :
-
Entrée : n = 6, k = 5
-
Sortie : 1
-
Explication : Les amis partent dans cet ordre : 5, 4, 6, 2, 3. Le gagnant est l'ami 1.
Contraintes :
Suivi :
Pourriez-vous résoudre ce problème en temps linéaire avec un espace constant ?
Solution :
class Solution {
/**
* @param Integer $n
* @param Integer $k
* @return Integer
*/
function findTheWinner($n, $k) {
$winner = 0;
for ($i = 1; $i <= $n; $i++) {
$winner = ($winner + $k) % $i;
}
return $winner + 1; // +1 because array index starts from 0
}
}
Liens de contact
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