合計 昨日 今日

スロットマシーン 作成

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら


Name: ゆうtyt
[URL]
Date: 2016年12月21日(水) 01:00
No: 61
(OFFLINE)

 Re: スロットマシーン 作成

[quote="ゆうtyt" id=3,18669,141896]
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <stdlib.h>
 
 
 
 
char reel1[11]={'1','2','3','4','5','6','7','8','9','1','2'};
char reel2[11]={'9','8','7','6','5','4','3','2','1','9','8'};
char reel3[11]={'1','2','3','4','5','6','7','8','9','1','2'};
int main()
{
int a,b,c;
int i;
int count=0;
 
srand(100);
 
 
 
for (i=0; i<=100; i++){
        a=rand()%9;
        b=rand()%9;
        c=rand()%9;
 
    if((reel1[a]==reel2[b]&& reel2[b]==reel3[c])||
       (reel1[a+1]==reel2[b+1]&& reel2[b+1]==reel3[c+1])||
       (reel1[a+2]==reel2[b+2]&& reel2[b+2]==reel3[c+2])||
       (reel1[a]==reel2[b+1]&& reel2[b+1]==reel3[c+2])||
       (reel3[c]==reel2[b+1]&& reel2[b+1]==reel3[a+2]))
 
   {
 
 
    printf("slot start\n");
    printf("[%c][%c][%c]\n",reel1[a],reel2[b],reel3[c]);
    printf("[%c][%c][%c]\n",reel1[a+1],reel2[b+1],reel3[c+1]);
    printf("[%c][%c][%c]\n",reel1[a+2],reel2[b+2],reel3[c+2]);
    printf("そろいました---------------。\n");
    count++;
}else{
 
            printf("slot start\n");
        printf("[%c][%c][%c]\n",reel1[a],reel2[b],reel3[c]);
        printf("[%c][%c][%c]\n",reel1[a+1],reel2[b+1],reel3[c+1]);
        printf("[%c][%c][%c]\n",reel1[a+2],reel2[b+2],reel3[c+2]);
        printf("はずれ\n");
 
    }
}
printf("そろったのは%d回です。\n",count);
 
return 0;
}

20行目のことです。
これだと101回実行してしまうので、そこを指摘してくれたと解釈しました。

Name: usao
[URL]
ハッカー(133,707 ポイント)
Date: 2016年12月21日(水) 09:15
No: 62
(OFFLINE)

 Re: スロットマシーン 作成

>1/9*1/9*1/9*5*9=45/729 でいいのですか?

うーん,どうなんでしょう.
並びのパターンとして
・斜めに揃うパターンが,2パターン(左上→右下方向 と 右上→左下方向)
・横に揃うパターンが,1パターン(現状,必ず3行同時に揃う)
で,それぞれの並びについて,数字が9パターン

なので… えっと……

( 2*(1/9)^3 + 1*(1/9)^3 )*9 = 3*(1/9)^2 = 1/27

3.7% くらい?

Name: ゆうtyt
[URL]
Date: 2016年12月22日(木) 22:45
No: 63
(OFFLINE)

 Re: スロットマシーン 作成

3つのリールのうち1つは降順にしているので横の並びは3パターンで計算しました
回答ありがとうございます

Name: ゆうtyt
[URL]
Date: 2016年12月23日(金) 01:54
No: 64
(OFFLINE)

 Re: スロットマシーン 作成

結果から考察をするんですが、理論上、揃う確率は約6%なんですが、乱数だと、100回中4回、6回、9回など、揃う回数に誤差があるのですか?

Name: みけCAT
[URL]
伝説なるハッカー(670,973 ポイント)
Date: 2016年12月23日(金) 07:05
No: 65
(ONLINE)

 Re: スロットマシーン 作成

usao さんが書きました:並びのパターンとして
・斜めに揃うパターンが,2パターン(左上→右下方向 と 右上→左下方向)
・横に揃うパターンが,1パターン(現状,必ず3行同時に揃う)
で,それぞれの並びについて,数字が9パターン

なので… えっと……

( 2*(1/9)^3 + 1*(1/9)^3 )*9 = 3*(1/9)^2 = 1/27

3.7% くらい?
ゆうtyt さんが書きました:3つのリールのうち1つは降順にしているので横の並びは3パターンで計算しました

なるほど、リールの向きを揃えると揃う確率が変わるのですね。

コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
 
int gcd(int a, int b)
{
    int r;
    while (b > 0){
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}
 
char reel1[11]={'1','2','3','4','5','6','7','8','9','1','2'};
char reel2[11]={'1','2','3','4','5','6','7','8','9','1','2'};
char reel3[11]={'1','2','3','4','5','6','7','8','9','1','2'};
int main(void)
{
    int a,b,c;
    int count=0, allcount = 0, g;
 
    for (a=0; a<9; a++){
        for (b=0; b<9; b++){
            for (c=0; c<9; c++) {
                allcount++;
                if((reel1[a]==reel2[b]&& reel2[b]==reel3[c])||
                (reel1[a+1]==reel2[b+1]&& reel2[b+1]==reel3[c+1])||
                (reel1[a+2]==reel2[b+2]&& reel2[b+2]==reel3[c+2])||
                (reel1[a]==reel2[b+1]&& reel2[b+1]==reel3[c+2])||
                (reel3[c]==reel2[b+1]&& reel2[b+1]==reel3[a+2]))
                {
                    count++;
                }
            }
        }
    }
 
    g = gcd(count, allcount);
    printf("確率は%d/%d (%d/%d)です。\n", count, allcount, count / g, allcount / g);
 
    return 0;
}

出力
コード[Text]: 全て選択
1
確率は27/729 (1/27)です。


ゆうtyt さんが書きました:結果から考察をするんですが、理論上、揃う確率は約6%なんですが、乱数だと、100回中4回、6回、9回など、揃う回数に誤差があるのですか?

はい。
1/6の確率で1が出るサイコロを6回振っても1がちょうど1回出るとは限らないのと似ていますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: usao
[URL]
ハッカー(133,707 ポイント)
Date: 2016年12月23日(金) 09:02
No: 66
(OFFLINE)

 Re: スロットマシーン 作成

>3つのリールのうち1つは降順にしているので

この点,見誤りました.失礼しました.

Name: ゆうtyt
[URL]
Date: 2016年12月23日(金) 11:23
No: 67
(OFFLINE)

 Re: スロットマシーン 作成

どのような理由で誤差が生じるのかおしえていただけませんか?

Name: ゆうtyt
[URL]
Date: 2017年1月11日(水) 21:30
No: 68
(OFFLINE)

 Re: スロットマシーン 作成

数字に重みを知けたいんですが、例えば1が揃ったらコインが1枚追加され、2と3は2枚、7は10枚にするにはどうしたらよいですか?
switch を使って考えようとしましたが、
switch () の()になんて書けばいいのかわかりません。

1つ前へ

Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[22人]