disons que j'ai un tableau avec différents prix d'article.Trouver la combinaison la plus basse de nombres prédéfinis, dont la somme est plus élevée que X
var myItemsEuro = [0.34, 0.11, 0.5, 0.33, 0.05, 0.13, 0.23, 3.22, 1.94]
Je voudrais avoir une fonction comme ceci:
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€
}
Pour éclaircir les choses:
J'ai une boîte d'articles avec pricetags sur eux (myItemsEuro). Je veux acheter un article, en utilisant mes articles comme un paiement. L'autre partie acceptera mon commerce si je paye au moins un cent. La fonction devrait fonctionner, donc je peux passer le prix de l'autre gars (0.89 par exemple) et il revient, quels articles je vais devoir donner. La combinaison de ces éléments doit être supérieure à 0,89 cents (au moins 0,9), mais devrait être aussi faible que possible! Je suis assez nouveau à JS, et je pensais à calculer chaque combinaison de mes articles, puis d'utiliser celui qui a la différence la plus faible pour le prix d'achat. Cela me semble vraiment compliqué et je ne sais même pas comment je le ferais calculer chaque combinaison et aussi enregistrer quels éléments ont été utilisés pour le calcul.
Y at-il un moyen d'y parvenir un peu plus efficace? Je ne m'attends pas vraiment à un code qui fonctionne parfaitement ici, un peu d'aide pour aller dans la bonne direction serait également bien.
Toute aide est appréciée! :)
Edit:
Désolé pour avoir manqué ma tentative. C'est juste que je n'ai aucune idée de comment je devrais résoudre ça du tout. Et non - pas de devoirs - ceci est censé faire partie d'une extension chromatique sur laquelle je travaille!
var myItemsEuro = [0.34, 0.11, 0.5, 0.33, 0.05, 0.13, 0.23, 3.22, 1.94]
function getTradeItems(marketPrice) {
\t var result = 0;
\t var positions = [];
\t for(i = 0; i < myItemsEuro.length; i++) {
\t \t result += myItemsEuro[i]; //add numbers from the array
\t \t positions.push(i); //save the used numbers position
\t \t if(result > marketPrice) { //if result is greater than marketPrice...
\t \t \t console.log(result)
console.log(positions)
\t \t \t return positions; //return positions in the array
\t \t }
\t
\t }
}
getTradeItems(1.31);
Edit:
Tri le tableau, puis en ajoutant des numéros ne donne pas une solution.
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
ressemble beaucoup à ses devoirs. Veuillez ajouter le code avec lequel vous avez essayé. – trincot
Ce n'est pas un service d'écriture de code. Vous avez au moins besoin de montrer vos tentatives de code ou de recherche pour résoudre ce problème et les gens vous aideront lorsque vous présentez du code qui ne fonctionne pas comme prévu. Voir [ask] et [Question checklist] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist) – charlietfl
S'il vous plaît pardonnez-moi. Je ne veux pas que les gens écrivent mon code ("... un peu d'aide pour aller dans la bonne direction serait aussi bien!"). Je n'ai pas ajouté ma propre approche, parce que je ne sais vraiment pas par où commencer - je ne sais pas comment résoudre ce problème. Ma propre tentative consistait uniquement à additionner les nombres de la matrice jusqu'à ce que la valeur soit supérieure au nombre attendu, puis renvoyer un tableau avec les positions. Je l'ai ajouté à mon message original. Désolé pour le malentendu! @charlietfl –