gpt4 book ai didi

C# OR Javascript 多次排列两个数组

转载 作者:太空狗 更新时间:2023-10-29 23:15:12 24 4
gpt4 key购买 nike

几天来我一直在努力,放弃然后重新解决这个问题。我已经研究了很多不同的方法,但是我要么无法正确实现它,要么它不适合我需要它做的事情。

基本上:我有两个数组,前缀和后缀

 prefix = { 0, 0, 3, 8, 8, 15} 
suffix = { 0, 3, 2, 7, 7, 9, 12, 15 }

我需要:

  • 最少使用 3 个组合(2+1 或 1+2),最多使用 6 个(3+3)。
  • 不要多次使用词缀(除非重复使用(即前缀中有两个 8))

最终目标是查看哪些组合可以等于 X。

例如

X = 42
3 + 8 + 8 + 2 + 9 + 12 = 42
0 + 8 + 8 + 7 + 7 + 12 = 42
| Prefix | | Suffix |

15 + 12 + 15 = 42
0 + 15 + 0 + 12 + 15 = 42

我已经尝试研究排列、IEnumerables、Concat 等,但找不到可以成功完成此操作的方法。

这些是我需要使用的“完整”数组。

public int[] Prefix = {0, 6, 6, 8, 8, 8, 8, 8, 8, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 16, 15, 15, 18, 18, 18, 18, 18, 18, 23 };
public int[] Suffix = {0, 3, 3, 9, 11, 11, 11, 17, 18, 18, 20, 25, 25, 27, 30, 30};

感谢任何帮助,如果我不清楚任何事情,我会尽可能澄清,谢谢!

编辑:有人还建议我运行它来使所有可能的结果相等,并将其存储在哈希表中,以便在使用正确值时使用?不确定哪个效果最好。

最佳答案

采用“OR Javascript”选项...

  1. 创建一个关联数组,将前缀的总计映射到生成该总计的前缀排列数组;然后填充它。
  2. 为后缀创建第二个相似的关联数组,但如果 expected_result - total 在前缀的关联数组中,则只用后缀排列填充它。
  3. 输出有效的后缀和相应的前缀。

JSFIDDLE

// Inputs
var prefixes = [0, 6, 6, 8, 8, 8, 8, 8, 8, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 16, 15, 15, 18, 18, 18, 18, 18, 18, 23],
suffixes = [0, 3, 3, 9, 11, 11, 11, 17, 18, 18, 20, 25, 25, 27, 30, 30],
expected_result = 42;

// Associative Arrays
var prefixTotals = {},
suffixTotals = {},
// Functions
addTotal = function( map, arr, other_map ){
var t = 0, i = 0;
for ( ; i < arr.length; ++i )
t += arr[i].value;
if ( ( other_map === undefined )
|| ( ( expected_result - t ) in other_map ) )
{
if ( !( t in map ) )
map[t] = [];
map[t].push( arr );
}
},
calcPermutations = function( affixes, map, other_map ) {
var i = 0, j, k, l = affixes.length;
for ( ; i < l; ++i )
{
addTotal( map, [ { index: i, value: affixes[i] } ], other_map );
for ( j = i+1; j < l; ++j )
{
addTotal( map, [ { index: i, value: affixes[i] }, { index: j, value: affixes[j] } ], other_map );
for ( k = j+1; k < l; ++k )
{
addTotal( map, [ { index: i, value: affixes[i] }, { index: j, value: affixes[j] }, { index: k, value: affixes[k] } ], other_map );
}
}
}
},
resultToString = function( affixes ){
var s = [];
for ( var i = 0; i < affixes.length; ++i )
s.push( affixes[i].index + '=>' + affixes[i].value );
return s.join(',');
};

calcPermutations( prefixes, prefixTotals, undefined );
calcPermutations( suffixes, suffixTotals, prefixTotals );

var i,j,k,p,s,count = 0,html=[];
for ( i in suffixTotals )
{
s = suffixTotals[i];
p = prefixTotals[expected_result - i];
for ( j = 0; j < p.length; ++j )
for ( k = 0; k < s.length; ++k )
html.push( 'Prefixes [' + resultToString( p[j] ) + '], Suffixes [' + resultToString( s[k] ) + ']' );
count += p.length * s.length;
}
html.unshift( 'There were ' + count + ' valid permutations:' );

document.getElementById( 'out' ).innerHTML = html.join( '<br />' );

关于C# OR Javascript 多次排列两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21044808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com