pastebin

Paste Search Dynamic
Recent pastes
rhymes
  1. <?php
  2.  
  3. /*N человек выстроились в кружок и начали считать по кругу считалку из M слогов. Тот, на ком закончилась считалка, выходит из круга, а оставшиеся встают плотнее и продолжают счёт. Когда в кругу остаётся
  4. меньше M человек, они идут пить чай с тортиком. Надо написать программу, рассчитывающую, какие места нужно занять, чтобы получить заветный тортик. Места в круге нумеруются от 1 до N. Программа должна вывести
  5.  
  6. ровно 1-у строчку такого вида:
  7. Выигрышные места: 3, 4, 14, 27*/
  8.  
  9. $total_1 = 30;//всего в классе 30 человек
  10. $skip_1 = 5;//считалка содержит 5 слогов
  11.  
  12.  
  13. $total_2 = 17;
  14. $skip_2 = 7;
  15.  
  16. $delimiter_1 = ", ";//строка-разделитель
  17.  
  18. //Можно решить 2-мя путями:
  19. //1) с помощью массива;
  20. //2) с помощю регулярных выражений.
  21.  
  22. //Вариант 1 - с помощью массива
  23.  
  24. /*array_shift() - Извлекает первый элемент массива
  25. array_push() - Добавляет один или несколько элементов в конец массива*/
  26.  
  27. //функция вывода элеметов массива в строчку с разделением определёнными символами, после последнего элемента разделитель не ставится (в данном случае разделителем будет запятая с пробелом)
  28. function outputArrayElementsStringDivision ($outputArray, $delimiter)
  29. {//начинает ф-цию
  30.  for ($i = 0; $i < count ($outputArray); $i++)//Перебираем последовательно все элементы массива
  31.   if ($i < (count ($outputArray) - 1))//если элемент не последний, то печатаем этот элемент и разделитель
  32.    echo "{$outputArray[$i]}{$delimiter}";
  33.   else echo "{$outputArray[$i]}";//если элемент последний, то печатаем только этот последний элемент
  34. }//заканчивает ф-цию
  35.  
  36. //функция-считалка
  37. function rhymes ($total, $skip, $delimiter)
  38. {//начинает ф-цию
  39. $arrayInvolved = array();       //подготовим пустой массив - не выбывшие участники считалки
  40. //Приведём массив в исходное состояние - он будет содержать стартовые порядковые номера участников
  41.  
  42. for ($i = 1; $i <= $total; $i++)
  43.  $arrayInvolved[$i-1] = $i;
  44.  
  45. //Пока размер массива превышает количество слогов считалки ($skip) первые $skip-1 элементов будут убираться из начала массива и приклеиваться в конец массива, а элемент под номером $skip
  46. //буде просто выпадать
  47. while ($skip <= count ($arrayInvolved))
  48. {//начинает while
  49.  for ($i = 1; $i <= $skip; $i++)//Перемещаем первые $skip-1 элементов из начала в конец массива
  50.  {//начинает for
  51.  $bufer = array_shift($arrayInvolved);//Извлекает первый элемент массива и помещает в буфер, при этом, этот первый элемент удаляется из массива, уменьшая его размер на 1
  52.  if ($i < $skip)
  53.   array_push($arrayInvolved, $bufer);//Если считалка не кончилась ($i < $skip), то значение из буфера добавляем в конец массива, если же считался кончилась, то элемент массива, на котором кончилась считалка
  54.                                      //сгниёт в буфере
  55.  }//заканчивает for
  56. }//заканчивает while
  57. sort ($arrayInvolved);//сортирует массив по возрастанию элементов без привяки значения к ключу
  58. //Выведм полученный рез-тат
  59. echo "Выигрышные места: ";
  60. outputArrayElementsStringDivision ($arrayInvolved, $delimiter);
  61. }//заканчивает ф-цию
  62.  
  63. rhymes ($total_1, $skip_1, $delimiter_1);
  64. echo "\n";
  65. rhymes ($total_2, $skip_2, $delimiter_1);
  66.  
  67. //var_dump ($arrayInvolved);
  68.  
  69. ?>
Parsed in 0.052 seconds