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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

1824閲覧

パーセンテージと計算

BeatStar

総合スコア4958

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/01/20 04:15

課題でもないですが、気になったので質問します。

パーセンテージの計算関連についてです。

nパーセント にする方法なのですが、

テーブルゲーム ( ポーカー等 ) で「 40% の確率で エース ( A ) にする」とか、

RPGとかで 「 n %の確率でクリティカルヒットダメージを与える」みたいなものありますよね?

あれってどういう風に計算しているのでしょうか?

たとえば、

木の盾: 10%の確率でダメージを半減させる
金の盾: 70%の確率でダメージを半減させる
棍棒 : 70%の確率で 80のダメージを与える
ナイフ: 60%の確率で 90のダメージを与える
...

という感じで武器の一覧があったりしますよね?

私のイメージでは、

敵の行動 ( 回避, 逃げる, 攻撃, etc. "攻撃" ならどういう攻撃か 等も ) や プレイヤーに攻撃が当たったかどうか ( 回避したりしたかどうか )

を乱数でやっているんだと思います。

普通に

乱数発行 -> それぞれの動きへ...

ならイメージしやすいのですが、

たとえば "10%の確率で回避成功" とした場合のように パーセンテージが定義されている場合はどういう計算になるのでしょうか?

趣味でやっていて、数学 ( というより算数自体? ) が苦手なので イメージできません。

一応、「パーセンテージ 計算方法」で検索すると、

パーセンテージ = 現在の点数 ÷ 最大値

で求められるのはわかったのですが、

"10%の確率で回避成功" のように、指定パーセンテージから成功/失敗 のように割り出す方法がわかりません...

何か計算方法があるのでしょうか?

宜しくお願い致します。

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

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

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

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

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

guest

回答3

0

まずは0~99の範囲の乱数を発生させる関数を用意します。別に1~100でもいいんですが、0~99の方がやりやすいんでそうします。

その結果を変数に入れます。

ransu = 乱数(0~99のどれか)

乱数が出来たら、それをif文の条件に組み込みます。"10%の確率で回避成功" であれば、

C

1if (ransu < 10) { 2 printf("回避成功!") 3} else { 4 printf("回避失敗...") 5}

とします。ransuは0~99のどれかを取り、if文の条件にヒットするのは0~9までの値のため、10/100= 10%が実現できます。

2017/01/20 14:00 修正

複数の条件を組み合わせたい――例えば「10%の確率で回避、10%の確率でダメージ半減、5%の確率でダメージ反射とかしたい」場合は都度乱数を生成して判定を行ってください。

投稿2017/01/20 04:37

編集2017/01/20 05:06
hitsujimeeee

総合スコア486

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

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

ynakano

2017/01/20 04:40

あれ?ダメージ反射のところ…
jawa

2017/01/20 04:51

横から失礼しますm(__)m 複数条件をこの方式で判定した場合、合計が100%を超える判定が行えません。 (例えば10%の確率で回避、50%の確率でダメージ半減、50%の確率でダメージ反射としたい場合などです。) 一般的には判定ごとに乱数を取りなおすのではないかと思います。
hitsujimeeee

2017/01/20 04:58

>jawaさん たしかにそうですね。失礼しました。修正しておきます。
BeatStar

2017/01/20 05:32

なるほど... パーセンテージより小さいなら OK (= true ) とすればいいのですね!
guest

0

言語によっても違いますが、多くの場合、乱数関数を呼ぶと、以下のいずれかで一様分布する値を返します。

  • 0から1までの小数
  • 0から(何かしら決められた)最大値までの整数
  • 指定する範囲内の整数どれか

3番目の場合、たとえば「1から10まで」というように指定すれば、1が出る確率は10%です。1つ目の場合でも、乱数 < 0.1とすれば、この条件を満たす確率は10%となります。

投稿2017/01/20 04:20

maisumakun

総合スコア145183

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

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

0

ベストアンサー

私がよく使う方法なら、こんなふうに判定します。

C

1if(rand()%100 < 10) { 2 // 10%の回避成功 3}

このやり方は小数点とかを考慮してませんが、一番単純な確率判定だと思います。

投稿2017/01/20 04:19

masaya_ohashi

総合スコア9206

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問