異なるアイテム価格の配列があるとしましょう。
var myItemsEuro = [0.34, 0.11, 0.5, 0.33, 0.05, 0.13, 0.23, 3.22, 1.94]
次のような機能が欲しいです:
function getTradeItems(0.89) { //The price of the item I want to buy
//Calculate, which of my items should be used to buy the item for 0.89€
return [0, 3, 6] //The position of my items in the array, which added together equal 0.90€
}
物事を明確にするために:
値札が付いたアイテムの箱(myItemsEuro)があります。アイテムを支払いとして使用して、アイテムを購入したいです。少なくとも 1 セントを過払いすれば、相手は私の取引を受け入れます。この関数は機能するはずなので、他の人の価格 (たとえば 0.89) を渡すと、返さなければならないアイテムが返されます。これらのアイテムの組み合わせは、0.89 セント (少なくとも 0.9) を超えている必要がありますが、できるだけ低くする必要があります。
私は JS にまったく慣れていないので、アイテムのすべての組み合わせを計算し、購入価格との差が最も小さい組み合わせを使用することを考えていました。これは私には非常に複雑に思えます。すべての組み合わせを計算し、計算に使用されたアイテムを保存する方法さえわかりません。
これをもう少し効率的に達成する方法はありますか?ここで完全に機能するコードは期待していません。正しい方向に進むための少しの助けもいいでしょう。
どんな助けでも大歓迎です!:)
編集:
私自身の試みを逃して申し訳ありません。これをどのように解決すればよいかまったくわかりません。いいえ-宿題ではありません-これは、私が取り組んでいるchromeextensionの一部であるはずです!
var myItemsEuro = [0.34, 0.11, 0.5, 0.33, 0.05, 0.13, 0.23, 3.22, 1.94]
function getTradeItems(marketPrice) {
var result = 0;
var positions = [];
for(i = 0; i < myItemsEuro.length; i++) {
result += myItemsEuro[i]; //add numbers from the array
positions.push(i); //save the used numbers position
if(result > marketPrice) { //if result is greater than marketPrice...
console.log(result)
console.log(positions)
return positions; //return positions in the array
}
}
}
getTradeItems(1.31);
編集:
配列を並べ替えてから数値を合計しても、解決策は得られません。
var x = 1.18;
//Sorted by numbers
var myItemsEuro = [0.05, 0.11, 0.13, 0.20, 0.35, 0.50, 0.60, 0.69, 0.75];
//Add together and stop when sum > x:
0.05 + 0.11 + 0.13 + 0.20 + 0.35 + 0.50 = 1.34
//Best solution would be adding [6] and [8] from the array
0.50 + 0.69 = 1.19