题目描述:
圈地运动,就是用很多木棍摆在地上组成一个面积大于0的多边形~小明喜欢圈地运动,于是他需要去小红店里面买一些木棍,期望圈出一块地来。小红想挑战一下小明,所以给小明设置了一些障碍。障碍分别是:1.如果小明要买第i块木棍的话,他就必须把前i-1块木棍都买下来。2.买了的木棍都必须用在圈地运动中。那么请问小明最少买多少根木棍,才能使得木棍围成的图形是个面积大于0多边形呢?
输入描述:第一行一个数n,表示木棍个数。 第二行n个数,第i个数表示第i个木棍的长度ai 1<=n<=10000 1<=ai<=10000
输出描述:输出一个数,表示最少需要的木棍个数,如果无解输出-1
样例输入
3 6 8 10
样例输出
3
提示:用三根6,8,10的木棍可以组成一个直角三角形的图形。
满足以下条件即可组成多边形
1、边数最少为3;
2、满足最长边的长度小于其余边长总和
var printOut = function(arr){
if(arr.length < 3){
console.log('-1');
}else{
for(i=3;i<=arr.length;i++){
//从第三位开始判断能否组成多边形
let temparr = [...arr]
let sumarr = temparr.splice(0,i)
//排序找最大值
sumarr.sort((x,y)=>x-y)
let sum = 0;
let maxnum = sumarr[i-1]
//求各边之和
sumarr.forEach(item=>{
sum += item
})
//判断最长边的长度是否小于其余边长总和
if(sum-maxnum >maxnum){
console.log(i);
return;
}
//如果到最后一位都么有满足条件,则返回-1,跳出循环
if(i===arr.length){
console.log('-1');
return;
}
}
}
}
printOut([6,8,10])
结果:
//printOut([6,8,10])
3
//printOut([1,2,3,3,9])
4
//printOut([9,6,4,5,9])
3
//printOut([1,2,3,5])
4
//printOut([1,2,2,5,9])
3
//printOut([1,2,1,5,9])
-1