题解 | #数组分组#

//稍作分析得知,我们要求一个数,这个数满足等于非3非5的倍数之和减去5的倍数和3的倍数的差值的一半,也即求的数x=[非3非5之和+(5倍数之和和3倍数之和的差值)]/2,如果在非3非5数组中能找到若干个元素之和等于x则结果为true,否则false

let arr2=[],flag=false

while(line = await readline()){

arr2.push(line)

}

let line1 =arr2[1].split(' ').map(Number)

let arr3=[],arr4=[],arr5=[],x1=0,x3=0,x5=0

for(let item of line1){

if(item%5===0) arr5.push(item),x5+=item //将5的倍数分组,并且求和

else if(item%3===0) arr3.push(item),x3+=item//将3的倍数分组,并且求和

else arr4.push(item),x1+=item//将既不是5的倍数也不是3的倍数分组,并且求和

}

if((x1+x3-x5)%2!==0||(x1+x5-x3)%2!==0){//如果这个数不是整数则结果为false,因为输入数据中只含整数

return console.log(false)

}

func(arr4,0,(x1+x3-x5)/2)//执行一次3的倍数减去5的倍数

func(arr4,0,(x1+x5-x3)/2)//执行一次5的倍数减去3的倍数

console.log(flag)//输出结果

function func(arr,res,target){

if(res==target) return flag=true

if(!flag){//如果已经找到这个数则不再执行后面的程序

for(let i=0;i<arr.length;i++){

let arr1 =arr.slice()

arr1.splice(i,1)

if(res==0){

func(arr1,arr[i],target)

}else{

func(arr1,res+arr[i],target)

}

}

}

}

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务