WeChat Red Envelopesの分割量は一般的な問題です。この記事では、PHP言語を介して分割された赤いエンベロープ量のアルゴリズムの例を実装して、開発者が赤いエンベロープの量のランダム割り当てをよりよく理解できるようにします。
まず、赤い封筒の量を分割する関数を作成する必要があります。関数のパラメーターは、赤いエンベロープ量と赤い封筒数です。
function divideAmount($amount, $num) {
// TODO: 赤いエンベロープ量分割アルゴリズムを実装します
}
次に、赤いエンベロープ量の分割に関するアルゴリズムのアイデアを分析しましょう。
赤い封筒の量が元であり、赤い封筒の数がnであると仮定すると、各赤い封筒の最大量はa/n yuanで、最小量は0.01元です。
最初に、赤い封筒の初期量として、0からAの間でn-1乱数をランダムに生成できます。次に、残りの量を最後の赤い封筒に割り当てます。
次に、赤いエンベロープ量の分割のアルゴリズムの実装を開始します。
function divideAmount($amount, $num) {
$remainAmount = $amount; // 残りの金額
$remainNum = $num; // 残りの赤いエンベロープ番号
$result = array(); // 結果を分割します
for ($i = 0; $i < $num - 1; $i++) {
$maxAmount = $remainAmount / $remainNum * 2; // 最大量
$randAmount = mt_rand(1, $maxAmount * 100) / 100; // ランダムに生成された量,小数点以下の場所を2つ保管してください
$remainAmount -= $randAmount; // 更新残りの金額
$remainNum--; // 更新残りの赤いエンベロープ番号
$result[] = $randAmount; // 結果アレイに金額を追加します
}
$result[] = $remainAmount; // 将残りの金額添加到结果数组
return $result;
}
まず、2つの変数を定義する必要があります。$の残りは残りの量を表し、$ remainnumは残りの赤いエンベロープ数を表します。
ループでは、最初に最大$ maxamountを計算し、次にMT_RAND関数を使用して、1〜maxamountの間の金額$ randamountをランダムに生成します。次に、残りの量と残りの赤いエンベロープ番号を更新し、結果アレイに$ randamountを追加します。
最後に、結果アレイに残りの量を追加し、結果アレイを返します。
このアルゴリズムの操作効果をテストしましょう。
$amount = 10; // 赤い封筒の量
$num = 5; // 赤い封筒の数
$result = divideAmount($amount, $num);
foreach ($result as $amount) {
echo $amount . "元\n";
}
上記のコードを実行すると、出力結果は次のとおりです。
1.07元
2.48元
2.28元
2.42元
1.75元
赤いエンベロープの量が5つの異なる量に正常に分割されたことがわかります。
この記事では、PHP言語を介して分割されたWeChat Red Envelopeの量のアルゴリズム例を実装しています。
アルゴリズムのアイデアと実装の詳細を分析することにより、赤いエンベロープ量の分割のプロセスを明確に理解できます。
WeChat Red Envelopesに関連する機能を開発している場合は、この記事のアルゴリズムの例から学ぶことができることを願っています。