@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.
// 解法一:
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