JavaScript の楽しい質問: 減量クラブ

黄舟
リリース: 2017-02-04 15:24:24
オリジナル
1084 人が閲覧しました

私の友人のシャオ・ワンと私は二人とも「減量フィットネスクラブ」のメンバーです。

シャオ・ワンは、毎月この日にメンバー全員の体重リストが発表されるのですが、例外なくいつも一番太っているので、最近いつも心配そうな顔をしています。

私もそのリストの一部だったので、彼にこう言いました。「心配しないで、友よ、リストの順序を変えるのを手伝ってあげるよ。」

考えて、この順序で並べた方が良いのではないかと思いました。各体重の数字は、各桁の合計に従って小さいものから大きいものへと配置されます。

たとえば、99kgの場合、その桁の合計は18であり、「体重」は18であることを意味します。

別の例として、100kg の重さは 1 であるため、99kg よりも前にランクされます。

タスクは次のとおりです:

減量クラブのメンバーリストの文字列が与えられた場合、それを体重順に並べ替えて返すことができますか?

例:

"56 65 74 100 99 68 86 180 90" => "100 180 90 56 65 74 68 86 99"
ログイン後にコピー

180 と 90 のように、2 つの数値が同じ重みを持つ場合、180 が最初になります。このとき、辞書の順序に従います。


すべての数値は正であり、リストは空である可能性があります。

正直、この質問を見たとき、少し汗ばみました〜結局のところ、私もデブです。

文字列を直接操作するのは明らかに不便なので、文字列を配列に分割しましょう。

次に配列を並べ替えます。ルールは次のとおりです:

1. 重みが優先され、重みが小さいほど順位が高くなります。

2. 重みが同じ場合は、辞書順に並べます。

重みを計算するには、つまり各桁の合計を計算するには、このメソッドが必要です:

function eachDigitSum(num){ var sum = 0; num = num - 0; while(num > 0){ sum += num % 10; num = parseInt(num / 10); } return sum; }
ログイン後にコピー

次に、辞書の順序を比較するには、このメソッドが必要です:

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++; } }
ログイン後にコピー

実際、このメソッドには代替手段があります。ネイティブ JS の場合:

String.prototype.localeCompare
ログイン後にコピー

デフォルトは辞書順です。


最後に、文字列に統合、並べ替え、集計するだけです。

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(" "); }
ログイン後にコピー

上記は JavaScript Fun question: Weight Loss Club の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (m.sbmmt.com) をご覧ください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!