fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. // 単位円の内部かどうかを判定する関数
  7. int isInsideCircle(double x, double y, double centerX, double centerY) {
  8. return ((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY)) <= 1.0;
  9. }
  10.  
  11. int main() {
  12. int i, numPoints = 1000000; // 試行回数(生成するランダム点の数)
  13. int insideCount = 0; // 重複領域に入った点の数
  14. double x, y; // ランダムに生成される点の座標
  15. double area; // 重複領域の近似面積
  16.  
  17. // 乱数の初期化
  18. srand(time(NULL));
  19.  
  20. // モンテカルロ法で点をランダムに生成し、4つの円の重複領域に入る点をカウント
  21. for (i = 0; i < numPoints; i++) {
  22. x = (double)rand() / RAND_MAX; // 0から1までのランダムなx座標
  23. y = (double)rand() / RAND_MAX; // 0から1までのランダムなy座標
  24.  
  25. // 4つの円に入っているか確認 (中心が (0,0), (1,0), (0,1), (1,1) の円)
  26. if (isInsideCircle(x, y, 0, 0) &&
  27. isInsideCircle(x, y, 1, 0) &&
  28. isInsideCircle(x, y, 0, 1) &&
  29. isInsideCircle(x, y, 1, 1)) {
  30. insideCount++;
  31. }
  32. }
  33.  
  34. // 面積の近似:単位正方形内での点の割合に4倍して面積を求める
  35. area = 4.0 * (double)insideCount / numPoints;
  36.  
  37. // 結果を出力
  38. printf("近似した重複領域の面積: %lf\n", area);
  39.  
  40. return 0;
  41. }
  42.  
Success #stdin #stdout 0.05s 5268KB
stdin
Standard input is empty
stdout
近似した重複領域の面積: 1.260460