fork download
  1. <?php
  2.  
  3. $total = 7;
  4. $skip = 4;
  5.  
  6. //создаем массив для хранения участников
  7. $humans = array();
  8.  
  9. //заполняем массив участниками жеребьевки
  10. for ($i = 0; $i < $total; $i++) {
  11. $humans[$i] = $i + 1;
  12. }
  13.  
  14. //узнаем количество участников;
  15. $length = count($humans);
  16.  
  17. //узнаем сколько участников не участвует в текущем круге
  18. $humansEnd = count($humans) % $skip;
  19.  
  20. //узнаем с какой позиции нужно начать следующий круг
  21. $newStart = count($humans) - $humansEnd - 1;
  22.  
  23. //на какой слог по счету выкидываем участника
  24. $count = $skip - 1;
  25.  
  26. //пока количество участнико больше или равно количеству слогов
  27. for ($i = $length; $i >= $skip; $i--) {
  28. unset($humans[$count]);
  29.  
  30. // если позиция участника совпадает с позицией для нового круга
  31. if ($count == $newStart) {
  32. // переносим всех оставшихся участник в начало массива
  33. while ($humansEnd > 0) {
  34. array_unshift($humans, array_pop($humans));
  35. $humansEnd--;
  36. }
  37.  
  38. // обновляем количество количество не участвующих в текущем круге
  39. $humansEnd = count($humans) % $skip;
  40.  
  41. // обновляем позицию для начала нового круга
  42. $newStart = count($humans) - $humansEnd - 1;
  43.  
  44. // задаем значение по умолчанию для слога
  45. $count = -1;
  46. }
  47. // обновляем счетчик
  48. $count += $skip;
  49. }
  50.  
  51. echo "Выигрышные места: ";
  52.  
  53. foreach ($humans as $value) {
  54. echo "{$value} ";
  55. }
Success #stdin #stdout 0.02s 52432KB
stdin
Standard input is empty
stdout
Выигрышные места: 7 2 3