jsは赤い封筒の順序と量を指定するアルゴリズムを実装します

jsは赤い封筒の順序と量を指定するアルゴリズムを実装します

この記事では、指定された赤い封筒の順序と金額を実装するためのjsの具体的なコードを共有します。具体的な内容は次のとおりです。

序文

  • 友人の依頼で書きました
  • 1パッケージあたりの最小金額は0.01
  • 指定された量以外のすべての値が0.01の場合、最後のパッケージが0になる確率は
  • このアルゴリズムは100万回のテストに合格し、エラー率は100万回中3回でした。

エフェクト表示

空パッケージの問題

赤い封筒アルゴリズム

/*
    パラメータ: float、int、int、float
    パラメータ1: 紅封筒の合計金額 パラメータ2: 紅封筒の数 パラメータ3: 特別な紅封筒を指定 パラメータ4: 特別な紅封筒の金額を指定*/
getPrize = function(合計、数、インデックス、ボリューム){
    許容量 = 合計 - 容積とします。

    arr = [] とします。
    i = 0 とします。
    while(i < 数値 - 2){
        // [0.01, allowance-(i*0.01)) を指定します
        temp = (Math.random()*(allowance - (number - 1 - i) * 0.01) + 0.01).toFixed(2) とします。
        // temp < 0 の場合 console.log(`temp:${temp}`);
        温度 = 温度 <= 0 ? 0.01 : 温度;        
        arr.push(parseFloat(temp));
        許容値 = parseFloat((許容値 - temp).toFixed(2));        
        私は++;
        // console.log(`arr:${arr}, i:${i}`);
        // 分布が 0 未満の場合は、強い方を利用して均等に分割します if(allowance <= 0){
            // console.log(`allowance:${allowance}`);
            
            
            w = arr.filter((val,index)=>{とする
                // console.log(`val:${val}`);
                (値>0.01){
                    
                    arr[インデックス] = parseFloat((arr[インデックス] - 0.01).toFixed(2));
                    戻り値:
                }
            });

            w.length == 0の場合{
                許容量 = 0;
            }それ以外{
                許容値 = 0.01;
            }
            
        }
    }
    // 最後はarr.push(parseFloat(allowance.toFixed(2)));に配置されます。
    結果を arr とします。

    result.slice(0, index).concat(parseFloat(volume), result.slice(index)); を返します。
}

テスト例

// テストサンプル
(m = 0; m < 10000; m++){
    合計を(Math.random()*100 + 0.01).toFixed(2)とします。

    数値 = Math.floor(Math.random()*20 +2);
    while(合計 / 数 < 0.01){
        数値 = Math.floor(Math.random()*20 +2);
    }

    index = Math.floor(Math.random()*(number - 1))とします。

    ボリュームを(Math.random()*(合計 - 0.01*(数値-1))+0.01).toFixed(2)とします。
    while(ボリューム >= 合計 || ボリューム + 0.01*(数値-1) > 合計){
        // console.log(`xx:${volume}`);
        音量 = (Math.random()*(合計 - 0.01*(数値-1))+0.01).toFixed(2);
        ボリューム = ボリューム <= 0 ? 0.01 : ボリューム;
    }
    
    
    test = getPrize(合計、数、インデックス、ボリューム);
    // コンソールログ(テスト);
    sum = test.reduce((total,val)=>total+=parseFloat(val)); とします。
    合計 = sum.toFixed(2);
    if(合計 !== 合計) {
        console.log(`ボリューム:${volume}、合計: ${total}、数値: ${number}`);
        console.log(`sum:${sum}`);
        コンソールにログ出力します。
    }
    test.map((val,index)=>{
        if(val <= 0 && index !== test.length - 1){
            console.log(`ボリューム:${volume}、合計: ${total}、数値: ${number}`);
            console.log(`sum:${sum}`);
            コンソールにログ出力します。
        }
    });

}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JS を使用してバイナリ ツリー トラバーサル アルゴリズムのサンプル コードを実装する
  • JavaScript を使用してソートアルゴリズムを実装する方法
  • Matlab による JavaScript プログラミング、重心アルゴリズムによる位置決め学習
  • JavaScript 初心者のための二分探索木アルゴリズムのチュートリアル
  • JavaScript で実装された 7 つのソート アルゴリズムの概要 (推奨!)
  • JavaScript でツリー構造を構築するための効率的なアルゴリズムについての簡単な説明
  • JavaScript でアルゴリズムの複雑さを学ぶ方法
  • JavaScript を使用して簡単なアルゴリズムを実行する方法

<<:  MySQLのサブクエリユニオンの効率性についての簡単な説明と

>>:  スーパーバイザーを使用して nginx + tomcat コンテナを管理する例

推薦する

CentOS7 環境で gcc (バージョン 10.2.0) をアップグレードする詳細な手順

目次簡単な紹介1. 現在のgccバージョンを確認する2. gccインストールパッケージ(バージョン1...

WordPress実験を実装するための3つの仮想マシンのKVM展開の詳細説明

1. KVM の概要カーネルベースの仮想マシンの略称は、Linux 2.6.20 以降のすべての主要...

JavaScript はクラス宝くじアプレットを実装します

この記事では、クラス抽選アプレットを実装するためのJavaScriptの具体的なコードを参考までに紹...

デザイン理論: なぜ私たちは間違った場所を見ているのでしょうか?

数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...

Angularコンポーネントの仲介モードの詳細な説明

目次1. 仲介業者モデル2. 例1. 見積コンポーネントに購入ボタンを追加する2. 親コンポーネント...

HTML テーブルタグチュートリアル (3): 幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、テーブルの幅と高さはコンテンツに応じて自動的に調整されます。テーブルの幅と高さを手動...

Docker+nacos+seata1.3.0 のインストールと使用設定チュートリアル

これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設...

CSS で要素フローティングとクリアフローティングを実装する方法

フローティングの基礎標準ドキュメント フローでは、要素は塊級元素と行內元素の 2 種類に分けられます...

Hadoop 2.Xの新機能、ごみ箱機能の説明

ごみ箱機能をオンにすると、削除されたファイルの元のデータをタイムアウトなしで復元できるため、誤って削...

VMware ESXi CLI の一般的なコマンドを調べる

目次【共通コマンド】 [一般的な esxi コマンドの概要] [esxcli コマンドの調査] ES...

Linuxシステムにおけるキー認証に基づくSSHサービスのプロセス

ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...

nginx がドメイン名アクセス用に設定されている場合にドメイン名の後に 2 つのスラッシュ // が表示される問題の解決方法

最近、個人のウェブサイトを書き直しました。Alibaba Cloudで新しいサーバーを購入しました。...

ZFS とは何か? ZFS を使用する理由とその機能

ZFSの歴史Z ファイル システム (ZFS) は、2001 年に Matthew Ahrens と...

MySQLは数百万のシミュレーションデータ操作コードを自動的に挿入します

私はデータベースツールとして Navicat を使用しています。他のものも同様です。 1. Navi...

ネイティブ CSS で無限テキストカルーセルを実装する一般的な方法

テキストカルーセルは私たちの日常生活で非常に一般的です。スーパーマーケットや実店舗の入り口には、テキ...