zoukankan      html  css  js  c++  java
  • CU上看到的一个简单的算法帖子

    今天也是明白了,编程与数学的关系。例子很简单,不过能说明问题。

    如果我们优化算法只从计算机特性来考虑,那么我们的人脑也成了计算机。不要忘记数学对于算法的重要影响。

    题目:

    返回小于数字 N 的所有 3 或者 5 的倍数的和,N 是函数的参数。

    这道题怎么写不用多说。不过看到最终的冠军获得者:

    function multSilgarth(N) {
      var threes = Math.floor(--N / 3);
      var fives = Math.floor(N / 5);
      var fifteen = Math.floor(N / 15);
    
      return (3 * threes * (threes + 1) + 5 * fives * (fives + 1) - 15 * fifteen * (fifteen + 1)) / 2;
    }
    
    module.exports = multSilgarth;

    这就是数学。

    我来解析一下思路吧:

    可以发现,N以内有(N-1)/3个,比如N是10吧,就有3个(3,6,9)

    那么他们的和呢?

    3+6+9=(1+2+3)*3;

    规律很明显了。

    3*(首项+末项)*项数/2;

    所以把3种类型加起来,然后减去共有的15的倍数个数就行了。

  • 相关阅读:
    教你如何剖析源码
    Java 简介
    java 入门-helloWorld
    linux yum 命令
    Linux vi/vim
    Linux 磁盘管理
    Linux 用户和用户组管理
    Linux 文件与目录管理
    Linux 文件基本属性
    Linux安装Mysql
  • 原文地址:https://www.cnblogs.com/wyc199288/p/6163533.html
Copyright © 2011-2022 走看看