题解 | #数组分组#

//稍作分析得知,我们要求一个数,这个数满足等于非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)

}

}

}

}

全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
海康威视 软开岗 15k15
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务