很早之前,就有了写点东西的打算,但是由于种种原因,一直拖到现在,好在迷途知返,终于走上了正轨。
在这里先做出如下声明:因本人文笔拙劣,可能博文中可能会出现错误或者词不达意之处,请大家能够谅解;同时也欢迎各位的批评和指正,在此先谢过大家。
接下来,我们进入今天的正题——有趣的编程题:
啤酒2元钱1瓶;4个瓶盖可换1瓶,2个空瓶可换1瓶,2个瓶盖和1个空瓶可换一瓶
问:10元可喝几瓶?
首先,我们先来分析一下这个问题:
其实这是一个算术题目,我们可以通过简单的推导得出答案,但是我们今天的目的是使用php写出关于这类问题的一个通用类,这个通用类中可自定义总钱数(这里为10),单价(这里为2)。
好了,解题具体思路有很多,这里我给出我的思路:使用while循环,条件是判断剩余钱数是否大于等于单价,如果为否则停止循环。循环体中的思路是如果瓶盖数可以换到1瓶,则将总钱数添加1个单价,同样,如果满足其它两个条件,则做出相同处理,费话不多说,直接上代码:
1 class beer 2 { 3 protected $total; # 总钱数 4 protected $per; # 单价 5 protected $beerCapNum; # 瓶盖数 6 protected $emptyBottleNum; # 空瓶数 7 protected $drinkNum; # 总共喝酒瓶数 8 9 public function __construct($total, $per) 10 { 11 $this->total = $total; 12 $this->per = $per; 13 } 14 15 /* 用来展示喝酒过程 */ 16 public function showDrinkProcess() 17 { 18 while($this->total >= $this->per) 19 { 20 $this->total -= $this->per; # 减去1瓶的钱数 21 $this->drinkNum ++; 22 $this->emptyBottleNum ++; # 增加喝的瓶数 23 $this->beerCapNum ++; # 增加一个瓶盖数 24 25 # 两个空瓶可换一瓶 26 if($this->emptyBottleNum==2) 27 { 28 $this->total += $this->per; 29 $this->emptyBottleNum = 0; 30 } 31 32 # 4个瓶盖可换一瓶 33 if($this->beerCapNum == 4) 34 { 35 $this->total += $this->per; 36 37 $this->beerCapNum = 0; 38 } 39 40 # 两个瓶盖和一个空瓶也可以换一瓶 41 if($this->beerCapNum>=2 && $this->emptyBottleNum==1) 42 { 43 $this->total += $this->per; 44 $this->emptyBottleNum = 0; 45 $this->beerCapNum -= 2; 46 } 47 48 echo '喝酒次数:',$this->drinkNum,' 剩余钱数:',$this->total,' 剩余瓶数:',$this->emptyBottleNum,' 剩余瓶盖:'.$this->beerCapNum,'<br />'; 49 } 50 } 51 }
使用方法和计算结果:
header("content-type:text/html; charset='UTF-8'"); $beer = new beer(10, 2); $beer->showDrinkProcess(); /********************以下为结果************************/ 喝酒次数:1 剩余钱数:8 剩余瓶数:1 剩余瓶盖:1 喝酒次数:2 剩余钱数:8 剩余瓶数:0 剩余瓶盖:2 喝酒次数:3 剩余钱数:8 剩余瓶数:0 剩余瓶盖:1 喝酒次数:4 剩余钱数:8 剩余瓶数:0 剩余瓶盖:0 喝酒次数:5 剩余钱数:6 剩余瓶数:1 剩余瓶盖:1 喝酒次数:6 剩余钱数:6 剩余瓶数:0 剩余瓶盖:2 喝酒次数:7 剩余钱数:6 剩余瓶数:0 剩余瓶盖:1 喝酒次数:8 剩余钱数:6 剩余瓶数:0 剩余瓶盖:0 喝酒次数:9 剩余钱数:4 剩余瓶数:1 剩余瓶盖:1 喝酒次数:10 剩余钱数:4 剩余瓶数:0 剩余瓶盖:2 喝酒次数:11 剩余钱数:4 剩余瓶数:0 剩余瓶盖:1 喝酒次数:12 剩余钱数:4 剩余瓶数:0 剩余瓶盖:0 喝酒次数:13 剩余钱数:2 剩余瓶数:1 剩余瓶盖:1 喝酒次数:14 剩余钱数:2 剩余瓶数:0 剩余瓶盖:2 喝酒次数:15 剩余钱数:2 剩余瓶数:0 剩余瓶盖:1 喝酒次数:16 剩余钱数:2 剩余瓶数:0 剩余瓶盖:0 喝酒次数:17 剩余钱数:0 剩余瓶数:1 剩余瓶盖:1
总结:可见本题的结果为10元可喝17瓶啤酒。在实例化时通过传递不同参数($total和$per),可以得到对应的结果,使用方法相同,在这里就不做演示了。
以上就是我对“能喝几瓶啤酒”问题的解答,感谢您的阅读。
注:因本人的技术有限,如果有理解错误的地方,还请各位批评指正,共同交流学习,谢谢。我会继续努力的。