2016-10-25 6 views
5

この変数xには、配列に対してテストする必要のある数値が含まれています。 var x = 10; var ary = [ 3,5 ]特定の合計で数値を分割する方法

私はxキーがxを作るまで追加何をすべきかを示し、その後、aryのキーの組み合わせの合計によって補うことができるかどうかをテストします。

この場合、3は使用できません。したがって、結果は= 5, 5の場合x = 10(関数は配列を検索して5 + 5が10に等しいことがわかるため)

配列の長さとxはわかりません。私はライブラリを使用していません。これは私がこれまでに来てどのくらいです:

var x = 10; 
 
var ary = [ 3, 5 ]; 
 

 
function cycle(){ 
 
    var result; 
 
    for(var i = 0; i < ary.length; i++){ 
 
    if(ary[ i ] + ary[ i ] == x){ 
 
     result = ary[ i ] + ',' + ary[ i ]; 
 
    } 
 
    else if(ary[ i ] + ary[ i + 1 ] == x){ 
 
     result = ary[ i ] + ',' + ary[ i + 1 ]; 
 
    } 
 
    else if(ary[ i + 1 ] + ary[ i + 1 ] == x){ 
 
     result = ary[ i + 1 ] + ',' + ary[ i + 1 ]; 
 
    } 
 
    return result; 
 
    } 
 
} 
 
    
 

 
var result = cycle(); 
 
document.write(result);

は、私は上記のコードは、少なくともでは柔軟ではない、ひどいです知っている、とだけ私はそれを使用する特定の場合に動作します。 すべてのの組み合わせはどうすればよいですか?ここでは、アレイはまだわずか2つの値 35を持っていると仮定すると、

は、どのような結果は、xに基づいて取得する方法をより多くの例は以下のとおりです。

x = 8場合、結果だろう= 3, 5

x = 15場合、結果だろう= 5, 5, 5

x = 9場合、結果だろう= 3, 3, 3など

:鍵が使用できる回数には制限があってはなりません。

+0

なぜ同じインデックス[i]は== X '[I] +進進 'で自体に追加され? – guest271314

+0

@ guest271314目標は、合計がxに足りるかどうかを調べることでした。 xを得るのに何度もインデックスを追加することを含みます。あるいは、xを得るためにそれを他のインデックスに加えてください。 –

+1

数値アルゴリズムのパーティション化はあなたを助けることができますhttp://stackoverflow.com/questions/400794/generating-the-partitions-of-a-number –

答えて

2

乗算を使用できます。入力配列ary1の中で最大の数に等しい.lengthを持つ配列を作成し、配列のインデックスに現在の番号を掛けて、.lengthと等しい配列を作成し、現在の要素で配列を埋めるaryの場合は、それ以外の場合は返された配列の結果のインデックスを入力番号に設定します。

const x = [8, 9, 10, 15]; 
 
let ary = [3, 5]; 
 

 
let nums = (n, arr) => { 
 
    let [keys, res] = [ 
 
    Array.from(Array(Math.max.apply(Math, arr) + 1).keys()).splice(1) 
 
    , Array() 
 
    ]; 
 
    for (let prop of arr) { 
 
    for (let index of keys) { 
 
     if (prop * index <= n) { 
 
     if (prop * index === n) { 
 
      res.push(Array(index).fill(prop)); break; 
 
     } 
 
     } else { 
 
     res.push(prop); break; 
 
     } 
 
    } 
 
    } 
 
    return {x:n, result:res}; 
 
} 
 

 
for (let num of x) console.log(nums(num, ary));

+0

あなたの答えをありがとう。これは私が持っていたよりも良いスタート方法です。唯一の問題は、関数が私が探しているものと一貫していない 'x'の値を変更し続けるときです。たとえば 'x = 15 'の場合、結果は' 5,5'で、 '5、5、5 'が必要です。私はこれを研究し、それを微調整しようとします。ありがとう。 –

+0

@ css.architect更新された投稿を参照してください。 – guest271314

関連する問題