赞
踩
题目见图,大致意思是n天计划来减肥,每天分为减肥a斤和增重b斤以及对应的概率,问n天后博主的体重的期望是多少。
思路:搜一下期望定义写出最终所求的公式:最终体重*该体重对应的概率 求和即可。
采用树的结构来实现这个公式。然后找到这个树对应的所有路径 再按照公式计算。
下面给出构建二叉树的代码,和找到所有路径的代码,按照公式计算没写因为牵扯到分数类型的运算,我不知道标准库里面有没有,难道还要自己写一个分数类吗?这笔试题真心有毒。
- struct Tree{
- int val;
- int p,q;
- Tree* left;
- Tree* right;
- Tree(int a,int p1,int q1):val(a),p(p1),q(q1),left(nullptr),right(nullptr){}
- };
- void conStructMy(Tree* root,vector<vector<int> >& arry,int i){
- int a=0, b=0, p=0, q=0;
- a = arry[i][0];
- b = arry[i][1];//arry[i][1];
- p = arry[i][2];//arry[i][2];
- q = arry[i][3];//arry[i][3];
- Tree* nodel = new Tree(-a,p,q);
- Tree* noder = new Tree(b,q-p,q);
- root->left = nodel;
- root->right = noder;
- if(i<4)
- {
- conStructMy(root->left, arry, i+1);
- conStructMy(root->right, arry, i+1);
- }
- return;
- }
- void pathHelper(vector<vector<int>> &result,vector<int> &path,Tree* root)
- {
- if(root == nullptr)
- return;
- path.push_back(root->val);
- if(root->left == nullptr && root->right == nullptr)
- {
- result.push_back(path);
- path.pop_back();
- return;
- }
- pathHelper(result, path, root->left);
- pathHelper(result, path, root->right);
- path.pop_back();
- }
- //全路径搜索。
- vector<vector<int>> allPath(Tree* root)
- {
- vector<vector<int>> result;
- vector<int> path;
- pathHelper(result, path, root);
- for(int i = 0;i < result.size();i++)
- {
- for(auto x : result[i])
- {
- cout << x << " ";
- }
- cout << endl;
- }
- return result;
- }
- int main()
- {
- vector<vector<int> > arry {{1,5,1,2},{2,4,1,2},{2,4,1,4},{2,4,2,7},{1,1,1,1}};
- Tree* root = new Tree(90,1,1);
- // for(int i = 0;i < 5;i++)
- // {
- // for(int j = 0; j < 4;j++)
- // cout << arry[i][j] << " ";
- // cout << endl;
- // }
- conStructMy(root, arry, 0);
- }
2018.8.1更新
来填个坑,大疆的线上笔试在赛码网平台,博主一直没收到面试通知,去官网看了下发现笔试不通过0-0 不知道这家公司是不是不怎么缺人。不但题出的巨坑且还不给过,不建议投这家公司,有点浪费时间咯。并不是因为别的,只是上面的理由。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。