fork download
  1. <?php
  2. header("Content-Type: text/plain; charset=utf-8");
  3.  
  4. class MoneyDivide
  5. {
  6. /**
  7.   * @var int
  8.   */
  9. private $amount;
  10.  
  11. /**
  12.   * @param int $amount
  13.   */
  14. public function __construct($amount)
  15. {
  16. $this->amount = $amount;
  17. }
  18.  
  19. /**
  20.   * @return array
  21.   */
  22. public function getStepsTask1()
  23. {
  24. return $this->calculateTask1($this->amount);
  25. }
  26.  
  27. /**
  28.   * @return array
  29.   */
  30. public function getStepsTask2()
  31. {
  32. return $this->calculateTask2($this->amount);
  33. }
  34.  
  35. /**
  36.   * @param int $amount
  37.   * @return array [min,max]
  38.   */
  39. private function calculateTask1($amount)
  40. {
  41. if ($amount < 4) {
  42. return [1,1];
  43. }
  44. $dividedAmount = floor($amount / 2);
  45. $remaining = $amount % 2;
  46. $stepsDivided = $this->calculateTask1($dividedAmount);
  47. $stepsDivided[1] += 1;
  48. $stepsDivided[0] = $stepsDivided[1];
  49. if ($remaining > 0) {
  50. $stepsDivided[0] = 1;
  51. }
  52. return $stepsDivided;
  53. }
  54.  
  55. /**
  56.   * @param int $amount
  57.   * @return array [min,max]
  58.   */
  59. private function calculateTask2($amount)
  60. {
  61. if ($amount < 4) {
  62. return [1,1];
  63. }
  64. $dividedAmount = floor($amount / 2);
  65. $remaining = $amount % 2;
  66. $stepsDivided = $this->calculateTask2($dividedAmount);
  67. $stepsDivided[1] += 1;
  68. $stepsDivided[0] = $stepsDivided[1];
  69. if ($remaining > 0) {
  70. $stepsDivided[0] = 1;
  71. }
  72. if ($amount == $this->amount) {
  73. $stepsDivided[1] += 1;
  74. }
  75. return $stepsDivided;
  76. }
  77. }
  78.  
  79. $amount = 12;
  80. $calculator = new MoneyDivide($amount);
  81. $stepsTask1 = $calculator->getStepsTask1();
  82. echo 'Задача 1 для ' . $amount . ' монеток. Требуется взвешиваний: ';
  83. if ($stepsTask1[0] == $stepsTask1[1]) {
  84. echo $stepsTask1[1];
  85. } else {
  86. echo $stepsTask1[0] . '-' . $stepsTask1[1];
  87. }
  88.  
  89. $stepsTask2 = $calculator->getStepsTask2();
  90. echo "\nЗадача 2 для " . $amount . ' монеток. Требуется взвешиваний: ';
  91. if ($stepsTask2[0] == $stepsTask2[1]) {
  92. echo $stepsTask2[1];
  93. } else {
  94. echo $stepsTask2[0] . '-' . $stepsTask2[1];
  95. }
  96.  
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
Задача 1 для 12 монеток. Требуется взвешиваний: 3
Задача 2 для 12 монеток. Требуется взвешиваний: 3-4