Mon ami Xiao Wang et moi sommes tous deux membres du "Weight Loss Fitness Club".
Xiao Wang a toujours eu l'air inquiet ces derniers temps, car une liste de poids de tous les membres est publiée ces jours-là chaque mois, et il est toujours le plus gros sans exception.
Je faisais aussi partie de la liste, alors je lui ai dit : "Ne t'inquiète pas, mon ami, je vais t'aider à changer l'ordre de la liste."
Après réflexion, j'ai pensé qu'il serait préférable de les ranger dans cet ordre : chaque numéro de poids est classé selon la somme de chaque chiffre, du plus petit au plus grand.
Par exemple, 99kg, la somme de ses chiffres est 18, ce qui signifie que le "poids" est 18.
Pour un autre exemple, 100 kg ont un poids de 1, donc ils se classent avant 99 kg.
La tâche est la suivante :
Étant donné une série de listes de membres de clubs de perte de poids, pouvez-vous la trier par poids et la retourner ?
Exemple :
"56 65 74 100 99 68 86 180 90" => "100 180 90 56 65 74 68 86 99"
Lorsque deux nombres ont le même poids, comme 180 et 90, alors 180 vient en premier. À ce moment-là, nous suivons l'ordre du dictionnaire.
Tous les chiffres sont positifs, la liste est peut-être vide.
Pour être honnête, quand j'ai vu cette question, j'étais un peu en sueur~ Après tout, je suis aussi un gros homme.
Il n'est évidemment pas pratique d'opérer directement des chaînes, alors divisons-les en tableaux !
Triez ensuite le tableau, les règles sont les suivantes :
1. Le poids est prioritaire, plus le poids est petit, plus le classement est élevé.
2. Lorsque les poids sont les mêmes, disposez-les dans l'ordre du dictionnaire.
Pour calculer le poids, c'est-à-dire pour calculer la somme de chaque chiffre, vous avez besoin de cette méthode :
function eachDigitSum(num){ var sum = 0; num = num - 0; while(num > 0){ sum += num % 10; num = parseInt(num / 10); } return sum; }
Ensuite, pour comparer l'ordre lexicographique, vous avez besoin de cette méthode :
function compareASCII(a,b){ var i=0; while(true){ var c1 = a.charCodeAt(i); var c2 = b.charCodeAt(i); if(!c1){ return -1; } if(!c2){ return 1; } if(c1 < c2){ return -1; } if(c1 > c2){ return 1; } i++; } }
En fait, cette méthode a une alternative en JS natif :
String.prototype.localeCompare
C'est par défaut l'ordre du dictionnaire.
Enfin, intégrez, triez et agrégez simplement en chaînes.
function orderWeight(str) { return str.split(" ").sort(function(a,b){ var n1 = eachDigitSum(a); var n2 = eachDigitSum(b); if(n1 > n2){ return 1; } else if(n1 < n2){ return -1; } else{ return compareASCII(a,b); } }).join(" "); }
Ce qui précède est le contenu de Questions intéressantes JavaScript : Club de perte de poids. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !