M개의 면을 가진 주사위를 N번 던진 후 예상할 수 있는 최대 점 수를 계산하는 작업이 주어집니다.
주사위의 첫 번째 면에는 1개의 점이 있고 두 번째 면에는 2개의 점이 있는 식입니다. 마찬가지로 M번째 면에는 M개의 점이 포함됩니다.
각 얼굴의 출현 확률은 1/M이 됩니다.
이제 예제를 사용하여 무엇을 해야 하는지 이해합시다 -
입력 - M=2, N=3
출력 − 1.875
설명 − 주사위의 면이 2개 ={1, 2}
주사위를 3번 던지면 샘플 공간은 =M N 이 됩니다. =2 3
{(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2,) (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2,)} Maximum number in (1, 1, 1) = 1 Maximum number in (1, 1, 2) = 2 Maximum number in (1, 2, 1) = 2 Maximum number in (1, 2, 2) = 2 Maximum number in (2, 1, 1) = 2 Maximum number in (2, 1, 2) = 2 Maximum number in (2, 2, 1) = 2 Maximum number in (2, 2, 2) = 2 Probability of each case = 1/23 = 0.125 Therefore, expectation of maximum number = (1+2+2+2+2+2+2+2) * (0.125) = 1.875
입력 - M=2, N=2
출력 − 1.75
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.
-
숫자가 발생할 수 있는 최대 경우 수는 공식을 사용하여 이전 숫자를 사용하여 찾을 수 있습니다. - i N – (i-1) N .
예를 들어 M=4이고 N=2인 경우 최대값이 4인 총 케이스 수는 4 2 가 됩니다. – (4-1) 2 =7.
따라서 최종 답은 1에서 M −
까지의 모든 요소에 이 공식을 적용하는 것입니다.(i * (i N – (i - 1) N )) / M N 그리고 그것들을 더합니다.
-
MaxExpect() 함수에서 double 유형의 변수 max =0을 초기화하여 합계를 저장합니다.
-
그런 다음 i=M에서 i>0
까지 루프 -
루프 내에서 위에서 언급한 공식을 적용하고 모든 결과 값을 최대 변수에 계속 추가합니다.
예시
#include <bits/stdc++.h> using namespace std; double MaxExpect(double M, double N){ double max = 0.0, i; for (i = M; i; i--) /*formula to find maximum number and sum of maximum numbers*/ max += (pow(i / M, N) - pow((i - 1) / M, N)) * i; return max; } int main(){ double M = 2, N = 3; cout << MaxExpect(M, N); return 0; }
출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 -
1.875