https://www.acmicpc.net/problem/26217

 

26217번: 별꽃의 세레나데 (Easy)

화관을 만들기 위해서 필요한 씨앗 개수의 기댓값을 출력한다. 정답과의 절대 오차/상대 오차 중 하나가 $10^{-4}$ 이하라면 정답으로 인정된다. 구체적으로, 제출한 답이 $a$이고 정답이 $b$일 때 $\

www.acmicpc.net

기댓값을 구하는 문제이다. 확률론을 배웠다면 쉽게 풀 수 있는 문제라고 생각한다.

N개의 꽃이 모두 피어나기 위한 기댓값은 베르누이 시행에서의 성공 횟수의 기댓값을 묻는 문제이다.

E = N(1+1/2+1/3+1/4+...+1/N) 으로 조화수열의 형태로 나온다.

위의 식을 간단히 코드로만 작성해주면 끝이다.

코드는 다음과 같다.

 

#include <iostream>
#include <algorithm>

using namespace std;
double harmonic(double n){
  double sum = 0;
  for(double i = 1; i < n+1; i++){
    sum += 1/i;
  }
  return sum;
}

int main(void){
  ios_base::sync_with_stdio(0);cin.tie(0); cout.tie(0);
  double n, ans;
  cin >> n;
  ans = n * harmonic(n);
  cout << ans;
  return 0;
}

 

 

 

루오