• PHP编程趣事:能喝几瓶啤酒?


    很早之前,就有了写点东西的打算,但是由于种种原因,一直拖到现在,好在迷途知返,终于走上了正轨。

    在这里先做出如下声明:因本人文笔拙劣,可能博文中可能会出现错误或者词不达意之处,请大家能够谅解;同时也欢迎各位的批评和指正,在此先谢过大家。

    接下来,我们进入今天的正题——有趣的编程题:

    啤酒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),可以得到对应的结果,使用方法相同,在这里就不做演示了。

    以上就是我对“能喝几瓶啤酒”问题的解答,感谢您的阅读。

    注:因本人的技术有限,如果有理解错误的地方,还请各位批评指正,共同交流学习,谢谢。我会继续努力的。

  • 相关阅读:
    健康检查详解:机制、配置、对比、实操
    制作自签名证书
    常用的UML建模
    UML建模更好的表达产品逻辑
    常用的UML建模
    UML建模图实战笔记
    领域驱动设计学习之路—DDD的原则与实践
    DDD领域驱动设计理论篇
    WAN、LAN、WLAN三种网口的区别
    新生代Eden与两个Survivor区的解释
  • 原文地址:https://www.cnblogs.com/lovecucu/p/6030060.html
Copyright © 2020-2023  润新知