質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

348閲覧

PHP 確率 4と5が出ません

poppipio

総合スコア1

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2024/04/22 00:11

確率分けして表示していますが
4と5が出ません
4が出る確率は10%
5が出る確率は5%

何か式が間違ってるんでしょうか?

<?php function generateRarity() { // 1から100までの乱数を生成 $randomNumber = mt_rand(1, 100); // 各数字の確率を設定 if ($randomNumber <= 50) { // 1が出る確率は50% return 1; } elseif ($randomNumber <= 50 + 35) { // 2が出る確率は35% return 2; } elseif ($randomNumber <= 50 + 35 + 20) { // 3が出る確率は20% return 3; } elseif ($randomNumber <= 50 + 35 + 20 + 10) { // 4が出る確率は10% return 4; } else { // 5が出る確率は5% return 5; } } // 乱数を生成して出力 for ($i = 0; $i < 3000; $i++) { echo generateRarity(); echo "<br>"; } ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tezcello

2024/04/22 03:41

> 4と5が出ません > 何か式が間違ってるんでしょうか? 間違っていますね。 ご提示のモノだと、4以上が出るのは、 $randomNumber <= 50 + 35 + 20 が成り立たなかった場合です。 (つまり、$randomNumber が105を超えた場合) ですが、 $randomNumber = mt_rand(1, 100); ですから、$randomNumber は100までですから、そんな事にはなりません。 お考えの様な確率では設定できないですから、見直しが必要でしょう。 __今回のアルゴリズムで計算するなら __全ての「数字が出る確率」を合計したら100%になる様に ベストアンサーにお選びの回答は、「確率」と言うモノを勘違いしていると思います。 アレは一定の抽選回数で全てを払い出さなければいけない特殊な状況下でのお話で、「確率」とは毎回毎回変化しないモノを言います。
guest

回答3

0

} elseif ($randomNumber <= 50 + 35 + 20) {
// 3が出る確率は20%
return 3;

算数の問題です
50+35+20
とはいくらになるでしょうか

投稿2024/04/22 00:23

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

コメントや回答で指摘されていますが、プログラムの間違い以前に、問題設定を間違っています。
間違った問題設定をそのまま正しくプログラムにしたので、プログラムは間違った問題設定どおり、間違っています。

問題設定 // 1が出る確率は50% // 2が出る確率は35% // 3が出る確率は20% // 4が出る確率は10% // 5が出る確率は5%

%の数字を全部足すと120ですが、%とは「100分のいくつ」という数字ですから上記問題は実現不可能です。

本当の問題設定 // 1が出る相対確率は50 // 2が出る相対確率は35 // 3が出る相対確率は20 // 4が出る相対確率は10 // 5が出る相対確率はは5

ということをしたいのであれば、mt_rand(1, 50+35+35+20+10+5);とすればいいです。

投稿2024/04/22 15:50

otn

総合スコア84641

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この手の確率処理はランダムで毎回取ってはいけません。
抽選回数を100としてA,B,Cが50対30対20だとすると配列にAを50個、Bを30個、Cを20個入れて
シャッフルし、最初にAが出たら次の抽選時A:B:C=49:30:20に
次にBが出たら次の抽選時A:B:C=49:29:20にし、100回目の抽選で
完全に確率が想定値になるよう設計してください。
101回目からは抽選箱を新しく作成することになります

投稿2024/04/22 02:45

yambejp

総合スコア114883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poppipio

2024/04/22 03:29

サーバーサイドでログを記録して引いた回数-の処理が必要ということですね ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問