四点共半圆

最近有个问题火了起来:$4$只小鸭子随机落在圆形池塘内,它们落在的同一个半圆内的概率是多少?

严格证明要用到积分,我好废物根本想不到,所以写了个$.cpp$验证下,答案是$0.5$,哥哥们可以证明试试。

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl

using namespace std;
typedef long long ll;

int deg() {
  int ret = rand() ^ 114514 ^ 991;
  return (int)(ret % 360 + 360) % 360;
}

bool in(int l, int r, int x) {
  return (l <= x && x <= r);
}

bool ck(int d1, int d2, int d3, int d4) {
  int l, r, x = d1, y = (d1 + 180) % 360;
  l = min(x, y);
  r = max(x, y);
  if (in(l, r, d2) && in(l, r, d3) && in(l, r, d4)) return true;
  if (!in(l, r, d2) && !in(l, r, d3) && !in(l, r, d4)) return true;
  return false;
}

bool solve() {
  int d1 = deg(), d2 = deg(), d3 = deg(), d4 = deg();
  if (ck(d1, d2, d3, d4) || ck(d2, d1, d3, d4) || ck(d3, d1, d2, d4) || ck(d4, d1, d2, d3)) return true;
  return false;
}

int main() {
  srand(time(NULL)); 
  int n = 1000000, tot = 0;
  for (int i = 1; i <= n; i++) {
    tot += (int)solve();
  }
  printf("%.10f\n", (double)tot / (double)n);
}

  

posted @ 2020-01-07 20:13  WstOne  阅读(332)  评论(0编辑  收藏  举报