`

js快速求出连续数字之和为指定数字的所有情况

阅读更多

题目:

  要求写出这样一个函数,给定一个大于2的数字r,经过此函数处理之后能够输出所有连续数字和为r的情况。

例如,给定数字15,则最终输出三个组合:[7,8],[4,5,6],[1,2,3,4,5];

先给出我写的代码吧,后面再给出分析:

    function add(r) {
        var resArr = []; //结果数组,存放连续数字的起始数字和结尾数字
        for (var q = 2; 2 * r / q - q >= 1; q++) { //q带表连续数字的个数
            var n = (2 * r / q - q + 1) / 2; //n为起始位置(n+q-1为结束位置)
            n === ~~n && resArr.push([n, n + q - 1]); //如果n为整数则存放此次结果
        }
        return resArr;
    }

 

分析:

首先我们假设在这串连续的数字中:

  起始位置的数字为n;

  总共的数字个数为Q;

那么我们可以得出:

  结束位置的数字为n+Q-1;

我们知道连续数字的和=(起始位置数字+结束位置数字)/2*总的数字个数

因此可得:

  r=(n+n+Q-1)/2*Q;

最终我们可以得到:

  起始位置的数字n=(2r/Q-Q+1)/2;

因为n是大于或等于1的,因此:

  2r/Q-Q>=1;

在以上的分析中:

  数字个数Q是不定的,我们根本不知道,但是我们知道Q最小为2,并且知道2r/Q-Q必须大于或等于1;

因此我们可以将Q可能的所有值进行遍历,从2开始遍历,遍历条件为2r/Q-Q>=1,Q每次自加1;

我们可以在循环当中根据r和Q得出起始位置n和结束位置n+Q-1;

附上草稿:

如果大家有更好的思路可以互相交流下

  • 大小: 1.3 MB
  • 大小: 11.5 KB
分享到:
评论

相关推荐

    JavaScript实现找出数组中最长的连续数字序列

    主要介绍了JavaScript实现找出数组中最长的连续数字序列的方法,需要的朋友可以参考下

    javascript入门笔记

    4、1997年 网景 将Javascript 1.1 提供给了ECMA(欧洲计算机制造商联合会),ECMA 获取了 JS 的核心,称之为 ECMA Script (ES) 完整的JS组成: 1、核心(ES) 2、文档对象模型(Document Object Model) - DOM 允许让 ...

    史上最强JavaScript日历控件正式版(无偿的永久的提供给大家免费使用,含全部源代码)

    年月时分秒输入框都具备以下3个属性:通过导航图标选择,直接使用键盘输入数字,直接从弹出的下拉框中选择.因此不管你选择什么样的日期和时间都可以找到一种最快捷的方法,用最少的鼠标点击来搞定 自动纠错功能 纠错...

    JavaScript完全自学宝典 源代码

    示例描述:介绍JavaScript管理cookie和userData。 11.1.html JavaScript写数据到cookie。 11.2.html JavaScript获取cookie信息。 11.3.html JavaScript修改cookie的保存有效期。 11.4.html 保存数据...

    微软JavaScript手册

    在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题进行详细说明的章节可供查阅。 如何操作呢?单击左边任意一个标题,即可显示...

    javascript文档

    javascript的官方文档 这些方便实用的信息将帮助您了解 JScript 的各个部分。 在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题...

    vscode-input-sequence:VSCode包,用于输入序号

    运算符(可选) + 它指定+或-中连续数字的生成规则。 增量( ++ )和减量( -- )的符号也可用。 步骤(可选) 1 它指定要加或减的整数。 数字(可选) 0 它指定整数中的位数。 基数(可选) 10 它指定2到36之间的...

    JS金额大小写转换

    <script type="text/javascript"> function CheckAlls(checked) { len = document.frmmain.elements.length; var i=0; for( i=0; i; i++) { if (document.frmmain.elements[i].name=='check_node_0') { ...

    正则表达式30分钟入门教程

    如果不使用^和$的话,对于\d{5,12}而言,使用这样的方法就只能保证字符串里包含5到12连续位数字,而不是整个字符串就是5到12位数字。 元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。^...

    JScript 语言参考

    在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题进行详细说明的章节可供查阅。 如何操作呢?单击左边任意一个标题,即可显示...

    正则表达式

    我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.JavaScript的正则表达式还通过以反斜杠(\)开头的转义序列支持某些非 字母字符.例如,序列 "\n" 在字符串中匹配的是一个直接量换...

    文章管理系统

    5.对首页最新评论和最新留言中连续数字或者连续字母进行强制换行,防止内容被隐藏 6.解除对p、img、input、button等标签默认空隙的限制 7.屏蔽掉网站数据库和采集数据库的数据库还原功能 8.广告管理中广告编辑,加入...

    JAVA上百实例源码以及开源项目源代码

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    Editplus 3[1].0

    上面重复使用了“[0-9]”,表示连续出现的三个数字 “\0”代表第一个“[0-9]”对应的原型,“\1”代表第二个“[0-9]”对应的原型,依此类推 “[”、“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\0\1\2...

    Lerx 网站内容管理系统 v5.5.zip

    且具有智能标题截取功能:由于英文和数字是半角字符,而中文汉字是全角,当标题中经常出现这两种混杂,又不愿意采用精简标题的情况下,强制截取长度会影响页面美观。智能截取会主动判断每一个字符是全角或半角,会...

    vs-sequential-number:在多个游标中输入顺序号。 (Visual Studio代码)

    运算符(最佳) + 它指定+ , - , *或/中连续数字的生成规则。 步骤(最佳) 1 它指定要加或减的整数。发行说明1.1.0 感谢SangheonYi,添加运算符'*','/'1.0.0 更新安全性依存关系0.0.1 初始发行

    Java-PHP-C#

    "只有0和不以0开头的数字与之匹配",我们也可以允许一个负号再数字之前: ^(0│-?[1-9][0-9]*)$ 这就是: "0 或者 一个以0开头可能有一个负号在前面的数字." 好了, 好了现在让我们别那么严谨,允许以0开头.现在让...

    java 正则表达式

    验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"验证Email...

    JAVA上百实例源码以及开源项目

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

Global site tag (gtag.js) - Google Analytics