Javascript 获取数字并从可用数字集中创建最小组合的逻辑

Javascript 获取数字并从可用数字集中创建最小组合的逻辑,javascript,Javascript,我正在编写一些javascript代码,在这些代码中,我需要为要连接的瓷砖数量确定最少的电缆类型。可用的电缆类型有3、4或5瓦电缆。我拿着布景,把它们放进一个阵列。注:在某些情况下,电缆类型仅为3、4 电缆类型示例:3、4、5 示例:NumTiles=21 答复:[5,5,5,3,3] 示例NumTiles:11 答复:[4,4,3] 示例NumTiles:12 答复[4,4,4] 示例NumTiles:22 答复:[5,5,4,4,4] 示例NumTiles:7 答复[4,3] 示例NumTi

我正在编写一些javascript代码,在这些代码中,我需要为要连接的瓷砖数量确定最少的电缆类型。可用的电缆类型有3、4或5瓦电缆。我拿着布景,把它们放进一个阵列。注:在某些情况下,电缆类型仅为3、4

电缆类型示例:3、4、5

示例:NumTiles=21 答复:[5,5,5,3,3]

示例NumTiles:11 答复:[4,4,3]

示例NumTiles:12 答复[4,4,4]

示例NumTiles:22 答复:[5,5,4,4,4]

示例NumTiles:7 答复[4,3]

示例NumTiles:33 答案[5,5,5,5,5,5,3]

电缆类型示例:3、4

示例NumTiles:10 答复[4,3,3]

示例NumTiles:17 答案[4,4,3,3,3]

示例NumTiles:22
回答[4,4,4,4,3,3]

如果您有长度为3,4,5的电缆,这些是您可以制作的最小基本数字:

cables length 
55         10 
344        11 // is 335 better?
345        12 // is 444 better?
3           3
4           4
5           5
33          6
34          7
44          8 // is 35 better?
45          9
通过从列表中选择相应的集合,并将剩余的集合添加为
5
集合,可以生成任何较大的数字。因此,要使
32
变为
345+55+55

您可以为3、4创建类似的基本列表:

cables length
433        10
443        11
444        12
3           3
4           4
4443       15
33          6
43          7
44          8
333         9
4333       13
4433       14
4444       16
44333      17
44433      18
44443      19
44444 20

因为我们不能使用2
5
s,所以您可以使用
44444
来制作
20
。混合搭配以获得所需长度。

以下是解决问题的方法:

var cable_types = [3, 4, 5];
cable_types = cable_types.sort().reverse();
var total = 21;
var final = [];
for(var i = 0 ; i < cable_types.length ; i++)
{
    while((total - cable_types[i]) >= 0)
    {
        final.push(cable_types[i]);
        total -= cable_types[i];
    }
}
if(total > 0)
{
    final.push(cable_types[cable_types.length-1]);
}
console.log(final);
var电缆类型=[3,4,5];
cable_types=cable_types.sort().reverse();
总风险价值=21;
var final=[];
对于(变量i=0;i=0)
{
最终推送(电缆类型[i]);
总计-=电缆类型[i];
}
}
如果(总数>0)
{
最终推送(电缆类型[电缆类型.长度-1]);
}
控制台日志(最终);

我是否遗漏了这里的问题?另外,您做了哪些尝试-您的代码在哪里?StackOverflow是帮助您调试问题的资源,而不是代码编写服务。这个问题可能会被否决和/或关闭,除非你能解决它目前面临的各种问题。给你一些有用的资源:,对不起,我错了,咖啡不够。。正确的方法是你提到的[4,4,4,4,3,3]。我将编辑这篇文章,更不用说这一点了,因为你似乎可以调整4和3,以不增加任何电缆数量。你想优化电缆类型或电缆数量吗?因此,
22=[4,4,4,4,3,3]
22=[5,5,5,4,3]
好吗?我正在优化电缆件。[5,5,5,4,3]将是更好的选择,只要有5种电缆类型可用。@Santi我用很多if语句和使用模数开始了一些代码,我觉得这不是正确的方法,这就是为什么我在这里问这个问题。我遇到的情况是,我的末端有多余的电缆,因此我认为我的代码不会有用。如果要这样做,为什么不干脆
21%5
,然后确定是否需要
4
3
?为此,我已经对数组进行了从高到低的排序@Halcyon@MartinBroadhurst ,问题刚刚编辑,上一个场景是示例NumTiles:22回答[4,4,4,4,4,3]-注意最小可能总数23,这是可以的,因为只有6根电缆使用了总xtra编号,所以不会连接。@VivekDoshi您的代码在每个数组集的末尾返回一个3。例如,我输入total=30,结果是[5,5,5,5,5,3]@DennisCafiero,尝试使用total 20,25,24@MartinBroadhurst就做模吗?例如:
[3,4](99)
99%20=19
99/20=4
所以:
44444 | 44444 | 4444444 | 44443
。这不是NP难。这甚至不是
O(n)
。那是
O(1)