公式

D - P(X or Y) 解説 by MMNMM


\(2\) つのサイコロを \(A,B\) とし、\(A\) の出目を \(a\) と、\(B\) の出目を \(b\) とすると、\((a,b)\) の組み合わせは \((1,1),(1,2),\ldots,(6,5),(6,6)\) の \(36\) 通りあります。 この \(36\) 通りのいずれか \(1\) つが必ず起き、どれが起こる確率も等しく \(\dfrac1{36}\) であるので、\(36\) 通りのうちいくつが条件を満たすか数えることでこの問題を解くことができます。

実装例は以下のようになります。

誤差が \(10 ^ {-9}\) 以下のとき正答と判定されるので、言語によっては出力する桁数を設定する必要がある場合があります。

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int X, Y;
    cin >> X >> Y;

    int count = 0; // 条件を満たす出目の組み合わせの個数
    for (int a = 1; a <= 6; ++a) // 1 つめのサイコロの出目
        for (int b = 1; b <= 6; ++b) // 2 つめのサイコロの出目
            if (a + b >= X || a + Y <= b || b + Y <= a) // 条件を満たすなら
                ++count; // カウントを増やす

    // 36 で割った値が答え
    cout << setprecision(10) << count / 36. << endl;
    return 0;
}
X, Y = map(int, input().split())

count = 0
for a in range(1, 7):
    for b in range(1, 7):
        if a + b >= X or a + Y <= b or b + Y <= a:
            count += 1

print(count / 36)

投稿日時:
最終更新: