ホームページ >バックエンド開発 >PHPの問題 >PHPコードで赤い封筒関数を実装する方法

PHPコードで赤い封筒関数を実装する方法

藏色散人
藏色散人オリジナル
2021-11-02 09:39:072685ブラウズ

PHP コードで赤い封筒関数を実装する方法: 1. 幸運の赤い封筒を実現するには、distribute_red_bages メソッドを使用します; 2. 赤い封筒の均等な分布を実現するには、average_red_bages メソッドを使用します; 3. rob_red_bages メソッドを使用して、指定された数の赤い封筒を達成します。

PHPコードで赤い封筒関数を実装する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

php コードはどのように動作しますか赤いエンベロープ関数を実装しますか?

PHP 赤いエンベロープ関数コード

以前にこの質問を受けたので、時間があるときにメモしました。最近とても面白いです

まず、赤い封筒を掴む方法を分類してみましょう:

赤い封筒を送る人には、大きく分けて 3 つのカテゴリがあります (他のカテゴリは考えていません)まだ、思いついたら連絡してください~)

1. 幸運の赤い封筒の数は可変です (すべては運に依存します)

2. 幸運の赤い封筒の指定された数(数字は確実、少なくとも1点)

3. 赤い封筒を均等に分けます(数字は1つです) (決めて、全員で均等に分けます) この方が書きやすいですよね?へへ

上記のコード:

<?php
var_dump(rob_red_bages(5 , 10));
var_dump(distribute_red_bages(5));
/*
方法主要功能:拼手气红包(个数不定)
一个参数
    参数一: 红包总金额(按分计算)
*/
function distribute_red_bages($sum){
    $sum = $sum*100;
    $i=0;
    while($sum>0){
        $temp = rand(1 , $sum);//红包值
        $sum -= $temp;
        $arr[$i++] = $temp/100;
    }
    //check($arr);
    return $arr;
}
/*
方法主要功能:均分红包
两个参数:
    参数一: 红包总金额
    参数二: 均分个数
*/
function average_red_bages($sum , $num){
    $res = $sum/$num;
    for($i=0 ; $i<$num ; $i++){
        $arr[$i] = $res;
    }
    //check($arr);
    return $arr;
}
/*
方法主要功能:规定个数的手气红包
两个参数: 
    参数一:红包总金额
    参数二:红包个数
    
    计算流程,随机生成num个数
    求和得到m
    用sum/m 得到每个数需要k
    用随机数*k
*/
function rob_red_bages($sum , $num){
    $sum = $sum*100;
    for($i=0 ; $i<$num ; $i++){
        $temp = rand(1 , $sum);
        $arr[$i] = $temp;
        $sumall += $temp;
    }
    $k = $sum/$sumall;
    for($i=0 ; $i<sizeof($arr); $i++){
        $arr2[$i] = $arr[$i]*$k/100;        
    }
    return $arr2;
}
/*红包总额检测*/
function check($arr){
    foreach($arr as $a){
        $sum += $a;
        echo $a."+";
    }
    
    echo " 0 =".$sum."\n";
}
?>

幸運の赤い封筒を分析してみましょう (平等なシェアについては話しません。誰もがそれを知っています):

幸運の赤い封筒の数封筒は不確実です: (合計金額: sum)

---->ランダムに合計より小さい最初の数値: n

---->合計金額からこの数値を引きます。 : temp = sum -n

---->temp

---->合計金額が 0

# になるまで上記のメソッドを繰り返します## ---- >ランダムな結果を格納する配列を返す

このメソッドは比較的従来のもので、指定された数の赤い封筒を達成するためにも使用できます。ただし~

縁起の良い赤封筒の枚数を指定するという考え方(総額合計、赤い封筒の数num)

---->以下の数字をランダムに数値化sum、配列を生成します

---->これらの数値を合計して allsum を取得します

---->sum を allsum で割って、生成されたすべての数値の公倍数を取得します

----> ;配列の各要素に公倍数を掛けて、それぞれの赤いエンベロープの値を取得します。

この方法には欠点があります (最終結果は合計よりわずかに大きくなる可能性があります。除算では無理数が発生する可能性があるため、合計よりわずかに小さくなります)

おそらくこれです!連絡や修正を歓迎します。 ~~~

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPコードで赤い封筒関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。