본문 바로가기
Computer Science

A응실 소수 완제품 확률 / 조합, 확률

by OKOK 2018. 12. 19.

1. 조합

2. 확률

3. 왜 소수 배열을 저장해두는지

4. 조합은 어떻게 만들어 내는지 


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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
 
int arr[8= { 2,3,5,7,11,13,17 };
double a, b, ans;
double result_PA, result_PB, Combinum, P1, P2;
 
double Combi(int i);
double P(int i, double p);
 
int main(void)
{
    int test_case;
    int T;
    int A, B;
 
    freopen("input.txt""r", stdin);
    scanf("%d"&T);
 
    for (test_case = 1; test_case <= T; ++test_case)
    {
        scanf("%d %d"&A, &B);                // 두사람 확률 A 80, B 90  
 
        ans = 0, result_PA = 0, result_PB = 0;
 
        a = (double)A / 100;            // 확률 A 0.8
        b = (double)B / 100;            // 확률 B 0.9
 
        for (int i = 0; i < 7; i++)
        {
            result_PA += (Combi(arr[i]) * P(arr[i], a));
            result_PB += (Combi(arr[i]) * P(arr[i], b));
        }
        ans = result_PA + result_PB - result_PA * result_PB;   // P(A)+P(B) - P(A)*P(B) 확률의 덧셈정리
 
        printf("#%d %.6lf\n", test_case, ans);
    }
    return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
 
double Combi(int i)
{
    Combinum = 1;
    if (i == 17return 18;
    if (i > 9) i = 18 - i;
    for (int k = 0; k < i; k++)
    {
        Combinum *= (18 - k);
    }
    for (int k = i; k >= 1; k--)
    {
        Combinum /= k;
    }
    return Combinum;
}
 
double P(int i, double p)
{
    P1 = 1;
    for (int k = 0; k < i; k++)         // 확률 p를 완제품 수 만큼
    {
        P1 *= p;
    }
    for (int k = 0; k < 18 - i; k++)   // 확률 1-p를 미완제품 수 만큼
    {
        P1 *= (1 - p);
    }
    return P1;
}
 
cs


댓글