【JavaScript——牛客网算法No.HJ55】挑7(输出跟7有关的数字个数,包括7的倍数和包含7的数字)

  • @No.HJ55 输出7有关数字的个数(7的倍数和包含7的数字)
  • @problem description:
    输出7有关数字的个数,包括7的倍数,还有包含7的数字(如17,27,37…70,71,72,73…)的个数
  • @input description:
    一个正整数N。(N不大于30000)
  • @output description:
    不大于N的与7有关的数字个数,例如输入20,与7有关的数字包括7,14,17.

  • 示例
  • @input:
    20
  • @output:
    3
// 解法一:
while(num = readline()){
    var result = 0;
    for(var i=1;i<=num;i++){
        if(i % 7 === 0 || (i + '').indexOf('7') != -1){
            result++
        }
    }
    console.log(result)
}
// 解法二:
var num = readline();
var result = [];
for(var i=1;i<num;i++){
    if(i % 7 === 0){
        result.push(i)
    }
    var arr = String(i).split("");
    if(arr.indexOf('7') != -1){
        result.push(i)
    }
}
console.log(Array.from(new Set(result)).length)
算法分析:

这个题目有点意思,不就是平时酒局饭桌上常玩的数7嘛,哈哈
一切都来源于生活~
回到算法上来:
题目思路还是很简单的,常规操作都会想到直接从1循环到指定位置,然后判断两个条件:
① 7的倍数:
对7取余结果为0;
② 包含7的数字:
先转换成字符串,然后用indexOf方法检测是否包含"7",返回结果不为-1即为包含;
满足其一( || )即可计数加一。


之后我还给出了第二种想法(挺睿智的,建议略过):
两个条件分开判断,满足即数组加项,最后数组元素会存在重复值,这里就可以用到ES6的Set方法去重,要注意的是这里Set()方法的输出结果为类数组对象:Set { 7, 14, 17 }
最后再通过Array.from()方法转换回数组,输出数组长度即可。


Code_Zevin_J —— 2020-08-26 20:36:58

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值