miles@Oscar 9 лет назад
Сommit
0e547c8123
2 измененных файлов с 99 добавлено и 0 удалено
  1. 5 0
      README.md
  2. 94 0
      drink/Change.class.php

+ 5 - 0
README.md

@@ -0,0 +1,5 @@
+Notes
+========
+Collections of daliy notes
+
+- drink: 喝汽水问题

+ 94 - 0
drink/Change.class.php

@@ -0,0 +1,94 @@
+<?php
+
+class Change
+{
+
+    /**
+     *
+     * @var 每多少盖子换一瓶汽水
+     */
+    public $capUnit;
+
+    /**
+     *
+     * @var 每多少空瓶换一瓶汽水
+     */
+    public $bottelUnit;
+
+    /**
+     *
+     * @var 总共金额
+     */
+    public $money;
+
+    /**
+     *
+     * @var 汽水单价
+     */
+    public $unit;
+
+    /**
+     *
+     * @var 总共能喝多少汽水
+     */
+    public $sum;
+
+    public function __construct()
+    {
+        $this->money = 10;
+        $this->unit = 2;
+        $this->capUnit = 4;
+        $this->bottelUnit = 2;
+    }
+
+    protected function capToWater($cap)
+    {
+        return intval($cap / $this->capUnit);
+    }
+
+    protected function capLeft($cap)
+    {
+        return $cap % $this->capUnit;
+    }
+
+    protected function bottleToWater($bottle)
+    {
+        return intval($bottle / $this->bottelUnit);
+    }
+
+    protected function bottelLeft($bottle)
+    {
+        return $bottle % $this->bottelUnit;
+    }
+
+    public function doCal()
+    {
+        $this->sum = intval($this->money / $this->unit);
+        return $this->cal($this->sum, 0, 0, 0);
+    }
+
+    protected function cal($num, $lastNum, $left_cap, $left_bottle)
+    {
+        $cap = $num + $left_cap;
+        $bottle = $num + $left_bottle;
+        
+        $capToWater = $this->capToWater($cap);
+        $bottleToWater = $this->bottleToWater($bottle);
+        $getWater = $capToWater + $bottleToWater;
+        $this->sum += $getWater;
+        
+        $left_cap = $this->capLeft($cap);
+        $left_bottle = $this->bottelLeft($bottle);
+        
+        $capToWater_next = $this->capToWater($getWater + $left_cap);
+        $bottleToWater_next = $this->bottleToWater($getWater + $left_bottle);
+        
+        if ($capToWater_next || $bottleToWater_next) {
+            $getWater = $this->cal($getWater, $num, $left_cap, $left_bottle);
+        }
+        return $this->sum;
+    }
+}
+
+$c = new Change();
+echo $c->doCal();