fork download
  1. <?php
  2.  
  3.  
  4. //Вводим количество учеников и количество слогов в считалке
  5. $numberOfStudents = 30;
  6. $numberOfSyllables = 5;
  7. //Создаем массив, ключи которого соответствуют номеру ученика, а значение (1 или 0) укажет, остается ли ученик в числе претендентов
  8. //на похавать, или идет мести двор
  9. $arrayForSyllables = array_fill(1, $numberOfStudents, 1);
  10. //Создадим переменную с текущим положением слога в считалке и переменную с количеством учеников в круге
  11. $syllable = 0;
  12. $studentsInCircle = 0;
  13.  
  14. //Создаем цикл, который начинается с расстановки в круг всех учеников и продолжается до тех пор, пока количество учеников будет
  15. //больше или равно количеству слогов в считалке
  16. for ($studentsInCircle = $numberOfStudents; $studentsInCircle >= $numberOfSyllables;) {
  17. //Перебираем элементы массива
  18. foreach ($arrayForSyllables as $numberPosition => &$eatCake) {
  19. //Проверяем, остались ли неиспользованные слоги в считалке после последнего прохода по кругу. Если да- продолжаем считалку
  20. //со слого $syllable, добавляя по слогу на каждого оставшегося в круге ученика
  21. if ($syllable != 0 and $eatCake == 1) {
  22. $syllable++;
  23. } elseif
  24. //Если остатка слогов нет, просто начинаем считалку, добавляя по слогу на каждого оставшегося в круге ученика
  25. ($eatCake == 1) {
  26. $syllable++;
  27. }
  28. //Если номер слога совпадает с количеством слогов в считалке, выгоняем ученика из круга (присваиваем $eatCake 0)
  29. // и обнуляем считалку
  30. if ($syllable == $numberOfSyllables) {
  31. $eatCake = 0;
  32. $syllable = 0;
  33. }
  34. }
  35. //Теперь посчитаем, сколько у нас осталось учеников в круге для проверки условия на следующей итерации
  36. $studentsInCircle = 0;
  37. foreach ($arrayForSyllables as $n) {
  38. if ($n != 0) {
  39. $studentsInCircle++;
  40. }
  41. }
  42. }
  43. //После выполнения цикла проходим по массиву и выписываем тех, кто остался в круге
  44. $winnerPosition='';
  45. foreach ($arrayForSyllables as $numberPosition => $eatCake){
  46. if ($eatCake==1){
  47. $winnerPosition=$winnerPosition . $numberPosition . ", ";
  48. }
  49. }
  50.  
  51. echo "Выигрышные позиции: " . $winnerPosition;
Success #stdin #stdout 0.02s 24404KB
stdin
Standard input is empty
stdout
Выигрышные позиции: 3, 4, 14, 27,