fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // 팩토리얼 계산 함수
  5. unsigned long long factorial(int num) {
  6. if (num == 0 || num == 1) return 1;
  7. unsigned long long result = 1;
  8. for (int i = 2; i <= num; i++) {
  9. result *= i;
  10. }
  11. return result;
  12. }
  13.  
  14. // 이항 계수 계산 함수
  15. unsigned long long binomial_coefficient(int n, int k) {
  16. if (k > n) return 0;
  17. return factorial(n) / (factorial(k) * factorial(n - k));
  18. }
  19.  
  20. // 이항 분포 확률 계산 함수
  21. double binomial_probability(int n, int k, double p) {
  22. double coefficient = binomial_coefficient(n, k);
  23. return coefficient * pow(p, k) * pow(1 - p, n - k);
  24. }
  25.  
  26. // m개 이상 성공할 확률 계산 함수
  27. double probability_at_least_m(int n, int m, double p) {
  28. double probability = 0.0;
  29. for (int k = m; k <= n; k++) {
  30. probability += binomial_probability(n, k, p);
  31. }
  32. return probability;
  33. }
  34.  
  35. int main() {
  36. int n; // 뽑기 횟수
  37. double p; // 뽑기 확률
  38. int m; // 최소 성공 횟수
  39.  
  40. // 사용자 입력
  41. printf("뽑기 횟수(n)를 입력하세요: ");
  42. scanf("%d", &n);
  43. printf("성공 확률(p)을 입력하세요 (0과 1 사이의 값): ");
  44. scanf("%lf", &p);
  45. printf("최소 성공 횟수(m)를 입력하세요: ");
  46. scanf("%d", &m);
  47.  
  48. // 입력값 유효성 검사
  49. if (n < 0 || p < 0.0 || p > 1.0 || m < 0 || m > n) {
  50. printf("잘못된 입력입니다. 뽑기 횟수는 0 이상의 정수여야 하고, 성공 확률은 0과 1 사이의 값이어야 하며, 최소 성공 횟수는 0에서 뽑기 횟수 사이여야 합니다.\n");
  51. return 1;
  52. }
  53.  
  54. // m개 이상 성공할 확률 계산 및 출력
  55. double probability = probability_at_least_m(n, m, p);
  56. printf("%d번 뽑기에서 %d개 이상 성공할 확률: %.4f\n", n, m, probability);
  57.  
  58. return 0;
  59. }
  60.  
Success #stdin #stdout 0.01s 5272KB
stdin
Standard input is empty
stdout
뽑기 횟수(n)를 입력하세요: 성공 확률(p)을 입력하세요 (0과 1 사이의 값): 최소 성공 횟수(m)를 입력하세요: 0번 뽑기에서 0개 이상 성공할 확률: 1.0000