金赤い封筒を発見するためのホームログイン書き込み、ユーザーに何も、最近のプロジェクトのニーズは、制限はありません。書き方を算出した制限がある場合、私は少しを所有しています。私は、これはほとんどのマイクロ手紙の封筒だと思います。プロジェクトおよびその他の要件が完了した後。ただ、私はそれを自分で書いた赤い封筒アルゴリズムの解体について投稿ブログへ。個人的に私はアルゴリズムが比較的現実的なシミュレーションのグラブ赤い封筒のルールであることを感じています。がらくたをカットします。まずコードを掲載しました。
インポートのjava.math.BigDecimal; 輸入はjava.util.ArrayList; 輸入java.util.Collections。 輸入はjava.util.List; 輸入java.util.Randomの。 パブリッククラスいるTestMain { パブリック静的無効メイン(文字列[] args){ ため(INT iが= 0; I <10; I ++){ リスト<BigDecimalを>マネー=数学(BigDecimal.valueOf(10)、6)。 IF(!マネー= NULL){ のBigDecimal B =新規のBigDecimal(0)。 (BigDecimalをBIGDECIMAL:マネー)のために{ System.out.print(BIGDECIMAL + "元")。 B = b.add(BIGDECIMAL)。 } System.out.print( "总额:" + B + "元")。 のSystem.out.println(); } } } / ** *が得られる赤色の量当たりの計算、最小当たり0.01元 ×トータル赤色MMM @param * @param番号番号 * @return * / パブリック静的リスト<BigDecimalを>数学( MMMのBigDecimal、INT番号){ IF(mmm.doubleValue()<0.01 *数){ 戻りNULL; } ランダムランダム(新しい新しい=ランダム); //お金、10で割っが算出される分割された1000等しい mmm.multiply INT金(= BigDecimal.valueOf(100))intValue();. //総乱数 ダブルカウント= 0; //は、一人あたりのポイント乱数取得 ダブル[] =新しい新しいarrRandomダブル[番号]を; //は、一人当たりの金額を取得 リスト<BigDecimalを> =新しい新しいarrMoneyのArrayList <BigDecimalを>(数値); ランダムな点のサイクル//数 のために(INT I = 0; I <arrRandom.length; I ++){ int型R&LTにRandom.nextInt =((番号)* 99) 。1 +; COUNT + = R&LT; arrRandom [I] = R&LT; } 赤色分割受信それぞれの量を計算// int型のC = 0; のための(INT I = 0; I <arrRandom.length; I ++){ //当たり当たりパーセンテージ得るために乱数を加算することにより算出される 二重X =新しい新しいダブル(arrRandom [I] /カウント) して得られたパーセンテージあたり//量 INT M =(INT)Math.floor(X *マネー); //場合0の量を求める、1セントの最小値は、配置 (M == 0){IFを M = 1; } //合計の計算によって得られた C + = M; そうでない場合、//最後のものは、通常計算されます { - IF(1 I <arrRandom.length) ; arrMoney.add(BigDecimalを新しい新しい(M).divide(新しい新規のBigDecimal(100))) {他} 、それが最後のものである場合、残りを入れ、//を人にお金の最終的な量 ; - (C + M).divide(新新のBigDecimal(100))のBigDecimal新新(金)arrMoney.add } } //崩壊あたりのランダムな量を得る Collections.shuffle(arrMoneyを); リターンarrMoney; } }
このコードを考えて論理:
1.まず、我々は、N個のコピーに数分割に基づいて、赤い封筒の量を入れたいのですが、平均的な問題があるため。平均的な人は、サブプレイアビリティが小さすぎだと思われる場合。
2.第二に、私たちはどのように分けることができますか?強力な演奏性を確保するために赤い封筒。実際に、私はこれらが重要ではないと思います。結局のところ、ちょうど運赤い封筒を見てください。私は不運マイクロ手紙の封筒20元、私は0.01元を取得することができた3個々の点を果たしています。並行性は素晴らしいものです。このコードは単純に入れて、私はそう乱数誰でしょう一人あたりの乱数の割合をカウントする、一緒にして、これらの人々の乱数(乱数の範囲は数×100です)。赤い封筒の割合に応じて分割。
出力:
最後の小数セント、リオーダー設定しているため。だから、最初の煙が大量に存在しないか、量を描きます。しかし、量が的外れすぎではありません。最終的に、自身の運に。
新しいブログを開始します。議論に歓迎し、予期せぬところがあるかもしれません。
親指の勧告は、最大の力、私のブログです。私は、アルゴリズムクラスのプログラムが好き。問題を議論する歓迎。
小規模農家の数が不明