zoukankan      html  css  js  c++  java
  • 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]

    今天地铁上和一个同事闲聊,给我说的一道题,回来想了想,写出来的,说来惭愧,我用的是行测方面数字推理里面的知识归纳出来的,当然这个可以用递归写出来,说说我的代码,以及递归的思路:

    <html>
    题:<br />
    有n个直线最多可以把一个平面分成多少个部分<br /><br />
    线条数:<input type="text" id="line"/><br />
    内交点:<label id="innerPoint"></label><br />
    分割数:<label id="part" style="background:yellow;"></label><br />
    <input type="button" onclick="calculate()" value="计算"/>
    </html>
    <script type="text/javascript">
    function calculate(line)
    {
     var line = document.getElementById('line').value;
     if(line == "")
     {
      line = 0;
      document.getElementById('line').value = line;
     }
     var line = parseInt(line);
     var innerPoint = line * (line -1) / 2;
     var part = (Math.pow(line,2) + line)/2 + 1;//line + innerPoint + 1等于(线条数的平方+线条数)/2 + 1
    
     document.getElementById('innerPoint').innerText = innerPoint;
     document.getElementById('part').innerText = part;
    }
    </script>

    说一下规律:

    ①最多分成的部分:线条数+内交点数+1

    ②内交点数=(线条数-1)的内交点数+(线条数-1),新添加的线条可以会与除他之外的线条有交点

    ③用递归求出内交点数,然后代入①计算

    上面是正常的数学思维,下面说说我用的行测知识,就是我代码的东东

    我列出了1~5条直线一些可用的参数:

    直线数  内交点  外交点  部分数

    1      0      2      2

    2      1      4       4

    3      3      6       7

    4      6      8      11

    5     10    10     16

    发现,外交点是没有意义的,反正都是直线数的2倍

    而部分数=直线数+内交点数+1

    相邻直线个数内交点个数组成一个等差数列,这个等差数列公差为1,  1-0=1,3-1=2,6-3=3,10-6=4, 横向看1+0=1,2+1=3,3+3=6...但是这样还是用到了递归要求出上一个对应的内交点个数,于是纵向看规律,2*1=2 3*2=6 4*3=12...正好是内交点个数的2倍 

    PS.最近犯了一些很SB的错误,自省一下!

  • 相关阅读:
    站点目录中的文件夹被删除后,应用程序池被重启
    silverlight中UserControl的属性在xaml文件中敲不出来的问题
    提取自Discuz NT 的验证码生成
    Asp.net首页生成静态页的一个比较好的方法
    asp.net 字符串格式化
    阻止用户关闭网页,提示保存的解决方案IE/FF/OP通用(未经测试)
    .NET程序如何防止被注入(整站)
    好久没有进步了
    C#数组排序
    我的静态页面
  • 原文地址:https://www.cnblogs.com/quinnxu/p/javascript.html
Copyright © 2011-2022 走看看