Javascript 如何循环遍历一个数字数组,以查看哪些数字与另一个数字相关?
我正在尝试用香草JavaScript编写一个简单的举重程序。用户输入一定量的重量,然后返回要放在杠铃两侧的特定重量板 然后,我把这个数字代入一个函数,从中减去45,算出杠铃的重量,然后将这个数字除以2,这是放在杠铃两侧的重量Javascript 如何循环遍历一个数字数组,以查看哪些数字与另一个数字相关?,javascript,arrays,loops,for-loop,Javascript,Arrays,Loops,For Loop,我正在尝试用香草JavaScript编写一个简单的举重程序。用户输入一定量的重量,然后返回要放在杠铃两侧的特定重量板 然后,我把这个数字代入一个函数,从中减去45,算出杠铃的重量,然后将这个数字除以2,这是放在杠铃两侧的重量 const num = document.getElementById("weightAmount").value; function getWeightAmount (num) { const newNum = num - 45; const halfNum = new
const num = document.getElementById("weightAmount").value;
function getWeightAmount (num) {
const newNum = num - 45;
const halfNum = newNum / 2;
return getWeights(halfNum);
}
我有一个阵列,每个重量板:
let plates = [44, 33, 22, 11, 5.5, 2.75];
我在正确循环数组以获取所需内容时遇到问题。如果我需要,比如说,每边60.5磅,它应该返回44,11,5.5磅。因此,我需要找出板中的哪些数字符合从第一个函数返回的数字
我有一个名为weights
的空数组,我想将plates
数组中的数字与返回的权重一起推送到该工作中
我的问题是如何循环通过板
数组来确定需要哪些权重 这里有一个解决方案。如果可用板的总重量不等于目标重量,它将返回最接近目标的可用板的组合。改编自
函数创建子集(数字、目标){
//筛选出大于目标的所有项目
数字=数字。过滤器(函数(值){
返回值如果目标重量的值始终是可用板的总和,我有一个简单的解决方案。假设重量数组按降序排序。我循环考虑所有可用重量,并且仅当总重量超过您所需的总重量时,才会进入下一个重量
function getWeights(targeWeight) {
let plates = [44, 33, 22, 11, 5.5, 2.75];
let totalWeight = 0;
let neededPlates = [];
let i = 0;
while(i < plates.length){
var pweight = totalWeight + plates[i];
if (pweight > targeWeight) {
i++;
continue;
}
totalWeight += plates[i];
neededPlates.push(plates[i]);
}
return neededPlates;
}
console.log(getWeights(60.5)); // [44, 11, 5.5]
console.log(getWeights(104.5)); //[44, 44, 11, 5.5]
函数getWeights(targetwight){
设板块=[44,33,22,11,5.5,2.75];
总重量=0;
设所需板=[];
设i=0;
而(i<板长){
var pweight=总重量+板[i];
如果(重量>目标重量){
i++;
继续;
}
总重量+=板[i];
需要的板。推(板[i]);
}
返回需要的板;
}
console.log(getWeights(60.5));//[44,11,5.5]
console.log(getWeights(104.5));//[44,44,11,5.5]
一个可能的解决方案是无限期地迭代,直到
- 你有办法了
- 给定一组权重,问题就无法解决
在每个迭代步骤中,将可能的最高权重减去可能的最高因子,将两者存储在适当的数据结构中(我的实现只是使用一个对象
),然后继续
const plates=[44,33,22,11,5.5,2.75];
//我们假设盘子总是被分类的
常量确定权重=(总权重)=>{
设系数=0;
让权重={};
而(总重量>0){
重量=板。查找(重量=>数学地板(总重量/重量)>0);
//我们不能从总重量中减去重量来解决这个问题
//因此,问题是无法解决的,我们返回null表示不存在解决方案
如果(!weight){返回null;}
//在我们从总重量中减去乘积之前,先确定乘以重量的系数
系数=数学地板(总重量/重量);
总重量=总重量-系数*重量;
//存储权重和因子
权重[权重]=系数;
}
返回权重;
}
log(determineWeights(104.5));/{“11:1”,44:2,5.5:1}
log(determineWeights(60.5));/{“11:1”,44:1,5.5:1}
console.log(determineWeights(5.0));//null
找到只除以一次目标重量的重量,将其添加到杠铃并从目标重量中减去。重复此操作,直到目标重量为零。使用plates.forEach(函数(plate){}
forfor(let plate of plates){}
可能相关:正如@FK82所提到的,这是一个背包,但有点修改。它实际上是一个变更问题的修改版本[,这本身就是背包问题的一个修改版本。@Taylorg:您可以按照下面给出的答案,在伪多项式时间内使用动态规划来编写自己的解决方案,也可以直接使用下面给出的解决方案,非常完美!谢谢!
function getWeights(targeWeight) {
let plates = [44, 33, 22, 11, 5.5, 2.75];
let totalWeight = 0;
let neededPlates = [];
let i = 0;
while(i < plates.length){
var pweight = totalWeight + plates[i];
if (pweight > targeWeight) {
i++;
continue;
}
totalWeight += plates[i];
neededPlates.push(plates[i]);
}
return neededPlates;
}
console.log(getWeights(60.5)); // [44, 11, 5.5]
console.log(getWeights(104.5)); //[44, 44, 11, 5.5]