2010-02-09 3 views
2

Каков хороший способ определить следующее.Что это за элегантный модуль, который я не могу понять?

У вас есть таблица игровых игроков в массиве размером N. Каждый раунд каждый игрок принимает ход.

Вы знаете индекс игрока, который должен идти первым, и каждый игрок будет поворачивать по возрастанию массива и возвратится к 0, когда он достигнет последнего индекса. Например, если игрок с индексом 3 пошел первым, то 4 будет вторым, а 2 - последним.

Как вы вычисляете индекс игрока, который идет последним в раунде?

Вот один из способов:

var startPosition = 3; 
var numberOfPlayers = 10; 

for (var i=0;i<numberOfPlayers;i++) { 
    startPosition++; 
    if (startPosition == numberOfPlayers) startPosition = 0; 
} 

ответ

7
(startPos + numberOfPlayers - 1) % numberOfPlayers 
+0

это даже лучше, чем по модулю, который я изначально разместил, я не был уверен, что (-1% n) есть :) –

+2

Хуже всего то, что результат '-1% n' зависит от какой язык вы используете. –

1

не результат всегда startPosition > 0 ? startPosition - 1 : numberOfPlayers - 1, т.е. это всегда один меньше, чем StartPosition для случая, когда StartPosition является 0, за исключением ..

Еще более «Элегантный» modulo может быть чем-то вроде (startPosition + numberOfPlayers - 1) % numberOfPlayers.

+0

Я собирался опубликовать это тоже, но чувствовал себя глупо. Я думал, что в этом вопросе чего-то не хватает. – Kylar

+0

Это также кажется немного тривиальным для меня, но, вероятно, это действительно то, что хотел Эндрю. –

+0

Да, это то, что я искал ... Я знал, что это было тривиально, когда я искал его, но почему-то я мог 't выяснить это: P –

Смежные вопросы