给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不一样位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
好比:153,能够使用数字3和数字1组成13,13是质数,知足神奇数。一样153能够找到31和53也为质数,只要找到一个质数即知足神奇数。
输入描述:
输入为两个整数a和b,表明[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。数组
输出描述:
输出为一个整数,表示区间内知足条件的整数个数优化
输入例子:
11 20code
输出例子:
6three
在网上看到的一些题,查找神奇数字,以为蛮有趣,跟小时候作题同样,其实比较简单,可是仍是把他记录下来吧。没有怎么优化过,也没有对边值和奇怪值进行处理,后续再说吧ip
/** * 检测是否为质数 * @param {[type]} num [description] * @return {[type]} [description] */ function isPrime(num){ num=parseInt(num); //若是能整除2或者5且相加能被3整除都不用循环 if(num%2===0||num%3===0){ return false; } if(num%5===0&&num>=10){ return false; } for(var i=3;i<num/2;i++){ if(num%i===0){ return false; } } return true; } /** * 排列组合的可能 * @param {[type]} num [description] * @return {[type]} [description] * 好比 153 能够组合成15 13 和 51 53 以及 31 35 */ function lineNum(num){ var stringNum=String(num); var numArr=stringNum.split(''); var numLen=numArr.length; var times=numLen*(numLen-1) var allNum=[]; for(var i=0;i<numLen;i++){ for(var j=0;j<numLen;j++){ if(j!=i&&numArr[i]!=0){ allNum.push(numArr[i]+numArr[j]) } } } return allNum; } /** * 查找神奇数 * @param {[type]} a [description] * @param {[type]} b [description] * @return {[type]} [description] */ function findMagicNum(a,b){ var allMagics=[]; var times=0; for(var i=a;i<=b;i++){ if(isPrime(i)&&allMagics.indexOf(i)<0){ allMagics.push(i); times++; } else if(!isPrime(i)){ var numLine=lineNum(i) for(var j=0;j<numLine.length;j++){ if(isPrime(numLine[j])&&allMagics.indexOf(i)<0){ allMagics.push(i); times++; } } } } return { allMagics:allMagics, num:times } } var obj=findMagicNum(11, 20); console.log(obj)
第二道string
牛牛想对一个数作若干次变换,直到这个数只剩下一位数字。
变换的规则是:将这个数变成 全部位数上的数字的乘积。好比285通过一次变换后转化成285=80.
问题是,要作多少次变换,使得这个数变成个位数。
输入描述:
输入一个整数。小于等于2,000,000,000。it
输出描述:
输出一个整数,表示变换次数。io
输入例子:
285console
输出例子:
2function
var time=1; function changeTime(num){ if(num<10){ time=0; }else{ var stringNum=String(num); var numArr=stringNum.split(''); var sum=1; for(var i=0;i<numArr.length;i++){ sum*=numArr[i]; } if(sum>10){ time++; changeTime(sum) } } return time; } console.log(changeTime(2869))
js实现三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出全部知足条件且不重复的三元组。
注意:答案中不能够包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 知足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
var threeSum = function(nums) { var i,j,k,len=nums.length; var arr=[],obj={}; for(i=0;i<len;i++){ for(j=i+1;j<len;j++){ for(k=i+2;k<len;k++){ if(nums[i]+nums[j]+nums[k]===0){ var arrItem=[]; let itemObj={}; arrItem.push(nums[i],nums[j],nums[k]); arrItem.sort(function(a,b){return a-b}) let str=arrItem.join(); if(!obj[str]){ obj[str]=true; arr.push(arrItem) } } } } } return arr };