zoukankan      html  css  js  c++  java
  • PHP经典算法百钱买小鸡

    遇到一道有趣的题,并计算2种方法的效率,发现如果穷举所有组合竟高达1000000次排列~所以简化到了600次。所以,你的一个条件,或者一个运算,可能会提高几千倍的效率!

    <?php 
    header("Content-Type:text/html;charset=utf-8");
    //百钱买小鸡
    /*
    公鸡5文钱1只,母鸡三文钱一只,小鸡一文钱三只。
    现在用100文钱共买了100只鸡,
    问这100只鸡中,公鸡,母鸡,小鸡各是多少只?
    */
    
    $start = microtime(true);
    //写法一 穷举所有排列:计算1000000次。
    for($g = 1; $g <= 100; $g++){
        for($m = 1; $m <= 100; $m++){
            for($x = 1; $x <= 100; $x++){
                if($g+$m+$x == 100 && $g*5+$m*3+$x/3==100){
                    echo "公,母,雏,分别为:".$g."&nbsp;".$m."&nbsp;".$x."<br />";
                }
                //计算排列组合次数
                if($g == 100 && $m == 100 && $x == 100){
                    echo "排列次数为:".$g*$m*$x;   
                }
            }
        }
    }
    echo "<br />";
    $end = microtime(true);
    echo "函数执行时间为:".($end - $start);//计算函数运行时间。
    echo "<br />";
    
    //写法二:简化组合.
    $start = microtime(true);
    for($g = 1; $g < 20; $g++){
        for($m = 1; $m <= 33; $m++){
            $x = 100 - $g - $m;
            if($g+$m+$x == 100 && $g*5+$m*3+$x/3==100){
                echo "公,母,雏,分别为:".$g."&nbsp;".$m."&nbsp;".$x."<br />";
            }
            //计算排列组合次数
            if($g == 19 && $m == 33){
                echo "排列次数为:".$g*$m;  
            }
        }
    }
    echo "<br />";
    $end = microtime(true);
    echo "函数执行时间为:".($end - $start);//计算函数运行时间。
    echo "<br />";
    ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    输出结果1: 
    公,母,雏,分别为:4 18 78 
    公,母,雏,分别为:8 11 81 
    公,母,雏,分别为:12 4 84 
    排列次数为:1000000 
    函数执行时间为:0.10584402084351

    再来看一下第二套算法~整整差了一千倍~虽说是毫秒。

    输出结果2: 
    公,母,雏,分别为:4 18 78 
    公,母,雏,分别为:8 11 81 
    公,母,雏,分别为:12 4 84 
    排列次数为:627 
    函数执行时间为:0.00016307830810547

  • 相关阅读:
    @ModelAttribute注解详细使用
    Spring MVC使用注解实现账户注册与登陆
    @PathVariable、@RequestHeader与@CookieValue注解的使用案例
    IDEA搭建我的第一个Spring MVC应用(附使用注解实现)
    JDBC自定义工具类
    JDBC与MySQL实现分页查询技术
    JavaWeb实战——记录网站上一次访问时间
    微信小程序使用setData修改数组中的指定下标的属性值
    Centos6.x 无法 ping 外网 --- 已解决
    Ckeditor失去焦点前保留光标位置
  • 原文地址:https://www.cnblogs.com/behindman/p/8919180.html
Copyright © 2011-2022 走看看