首页 > 其他 > 详细

2017年0304 内推阿里实习——编程测试,积分求概率

时间:2017-03-04 14:05:49      阅读:800      评论:0      收藏:0      [点我收藏+]

题目:

给出心形函数(x*x + y*y - 1)^2 - x*x*y*y  = 0

然后问一个点(X,Y) X服从正态分布(u_x,sigma_x),Y服从正态分布(u_y, sigma_y)

求点(X,Y) 落在心形函数内部的概率。

 

PS: 公式不会推,强行蒙特卡罗法骗20%。。。

 

%20code

#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <numeric>
#include <limits>
#include <stdio.h>
using namespace std;

bool is_in_love(double x, double y) {
    return (x*x + y*y -1)*(x*x + y*y - 1) - x*x*y*y < 0;
}

/** 请完成下面这个函数,实现题目要求的功能 **/
/** 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^  **/
double leartCurve(double mu1, double sigma1, double mu2, double sigma2) {
    int MAX_T = 1000000;
    double get_time = 0;
    int cnt = 0;
    default_random_engine e; //引擎
    while (cnt < MAX_T) {
        normal_distribution<double> nx(mu1, sigma1); //均值, 方
        double x = nx(e);
        normal_distribution<double> ny(mu2, sigma2);
        double y = ny(e);
        if (is_in_love(x,y)) {
            get_time++;
        }
    }
    return (get_time/MAX_T);
}

int main() {
    double res;
    
    double _mu1;
    cin >> _mu1;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), \n);
    
    double _sigma1;
    cin >> _sigma1;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), \n);
    
    double _mu2;
    cin >> _mu2;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), \n);
    
    double _sigma2;
    cin >> _sigma2;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), \n);
    
    
    res = leartCurve(_mu1, _sigma1, _mu2, _sigma2);
    printf("%.1lf\n", res);
    
    return 0;
    
}

 

2017年0304 内推阿里实习——编程测试,积分求概率

原文:http://www.cnblogs.com/chenhuan001/p/6501005.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!