JavaScript编程题(一)

题目:

一个数列: 1, 12, 123, 1234, 12345,...12345678910,1234567891011...。计算从数列的第 m 个到第 n 个(包含端点)有多少个数可以被3整除。

方法一:

for循环m 到 n ,循环内内嵌一个循环,算出当前的数字是多少,是否能被3整除,能则计数+1,不能计数不加1。

这是最容易想到的办法,就不写出来了。

方法二:

改进一下方法一,for循环m 到 n ,循环内内嵌一个循环,计算出当前数字每位之和,判断是否能被3整除,能则计数加1,不能就不加1。

function findNum1(m,n){
    let nums=0;
    for(var i=m;i<=n;i++){
        var num=1;
        for(var j=2;j<=i;j++){
            num=num+j;
        }
        if(num%3==0){
            nums++;
        }
    }
    console.log(nums)
}

方法三:

改进方法二,for循环m 到 n ,计算当前数字每位之和,判断是否能被3整除,发现当前数字每位之和有规律:

i当前数字每位之和
111
2123
31236
4123410
.........
i1234...i(1+i)*i/2

相比方法二减少一层循环。

function findNum2(l,r){
    let nums=0;
    for(var i=l;i<=r;i++){
        var num=((i+1)*i)/2;
        if(num%3==0){
            nums++;
        }
    }
    console.log(nums)
}

方法四:(这个真没想到,记录一下别人的棒方法!)

i数字是否能被3整除
11F
212T
3123T
41234F
512345T
6123456T
71234567F
812345678T
9123456789T

规律:从1开始,每3个数字中有1个不能被3整除,所以数列1~m中,有 parseInt( (m+2)/3 ) 个不能被3整除,剩下的m - parseInt( (m+2)/3 ) 个可以被3整除;则数列m~n中,有m - n + 1 个数字,其中有 parseInt( (n+2)/3 ) - parseInt( (m-1+2)/3 ) 个不能被3整除,剩下的 m - n + 1 - ( parseInt( (n+2)/3 ) - parseInt( (m-1+2)/3 ) )个数字是可以被3整除的。规律也是可以证明的,这里(略~)

这样就不用循环了。

function findNum3(m,n){
   let nums = n - m + 1 - ( parseInt((n+2)/3) - parseInt((m+1)/3) );
   
    console.log(nums)
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值