js中或python中指定数组,如何循环出a+b+c必需是数组里有的数

var str = [1, 3, 5, 6, 7, 8, 11, 13, 15, 16, 17, 18, 21, 23, 24, 25, 29, 31, 32, 33, 35, 37, 39, 41, 45, 47, 48, 52, 63, 65, 67, 68, 73, 81]

如知道a的数如何循环1-81得到b,c数跟a相加是str中才有的
var a = 6
var b = []
var c = []

a+b=必需等于str中有的数
b+c=必需等于str中有的数
a+b+c= 必需等于str有中的数

如(a+b+c) 6 + 9 + 14 = 29 str中有
分解(a+b) 6 + 9 = 15 str中有,(b+c) 9+14 = 23 str中也有

阅读 2.4k
3 个回答

假设题目为 a,b,c不相等

const str = [1, 3, 5, 6, 7, 8, 11, 13, 15, 16, 17, 18, 21, 23, 24, 25, 29, 31, 32, 33, 35, 37, 39, 41, 45, 47, 48, 52, 63, 65, 67, 68, 73, 81]
const a=6
let b,c
const strSet=new Set(str)
const strLength=str.length
for(let i=strLength-1;i>=0;i--){
    let sum=str[i] // 假设a+b+c最终和
    const bAndC=sum-a; // 获得 b+c的值
    console.log(bAndC)
    if(!strSet.has(bAndC)) continue //数组中不存在该值 则继续下一循环
    for(let j=strLength-1;j>=0;j--){ // 因为三者不相等,从倒数第二位开始循环
        const supposeB=bAndC-str[j] //假设c的值为 str[j],则b为b+c的值减c
        if(strSet.has(supposeB)){ // 如果数组中存在,则赋值 b,c并结束循环
            b=supposeB
            c=str[j]
            break;
        }
    }
    if(b&&c) break; //如果b c都有值,则结束循环
}
console.log('a:',a)
console.log('b:',b)
console.log('c:',c)

a + b = 必需等于str中的数 说明 str 中的数减 a 一定有一个数是在 str 中的,剩下的自己想吧

穷举不就完了:

  1. a + b 在数组里,可以算出所有 b 的潜在值
  2. b + c 和 a + b + c 都在数组里,可以找出所有潜在值
  3. 两者一合并
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题