阿里小火车股票编程题

我觉得我的题目看到的我应该是理解对了的
就是垂直遍历二叉树,然而也是看了好久看懂,只能暴力
算过了大部分,但是应该会看代码
至于股票的题,求思路
全部评论
第一题就是要么啥都不买,要么就全都买一种股票,这样才能收益最大化,你想想是不是这个道理。然后你从第一个交易期往后递推就可以了,维护两个数组,第一个表示某交易期后可以获得的最大现金,第二个用二维数组,表示某交易期后能获得的某股最大股票数量。用第k-1交易期的数组值来更新第k交易期的。
点赞 回复 分享
发布于 2017-04-27 08:38
#include <iostream> #include <vector> #include <cstdio> #include <algorithm> using namespace std; /*请完成下面这个函数,实现题目要求的功能*/ /*当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ */ /******************************开始写代码******************************/ double StockGod(int n, int m, double p, const vector<vector<double>>& prices) { vector<double> money; vector<double> temp; for (int i = 0; i <= n; i++) {//0--n-1代表股票,n代表现金 money.push_back(1); temp.push_back(0); } for (int i = 1; i < m-1; i++) {//每轮  //对于现金特别对待 double cost = money[n]; for (int k = 0; k < n; k++) {//上一轮选择 if (money[k] / prices[i - 1][k] * prices[i][k] * (1 - p)  > cost) cost = money[k] / prices[i - 1][k] * prices[i][k] * (1 - p); } temp[n] = cost; //对于股票 for (int j = 0; j < n; j++) {//对每一个选择(股票) double cost = money[n]; for (int k = 0; k < n; k++) {//根据上一轮价格,更新当前这轮的价格,选择最大的 if (k != j) { if (money[k] / prices[i - 1][k] * prices[i][k] * (1 - p) > cost) cost = money[k] / prices[i - 1][k] * prices[i][k] * (1 - p); } else { if (money[k] / prices[i - 1][k] * prices[i][k]  > cost) cost = money[k] / prices[i - 1][k] * prices[i][k] ; } } temp[j] = cost; } for (int tt = 0; tt <= n; tt++) money[tt] = temp[tt]; } double maxcost = money[n]; for (int i = 0; i < n; i++) if (money[i] / prices[m - 2][i] * prices[m - 1][i] * (1 - p) > maxcost) maxcost = money[i] / prices[m - 2][i] * prices[m - 1][i] * (1 - p); return maxcost; } /******************************结束写代码******************************/ /* 相当于有现金分多条路线从第注入到股市,这多条路线必然有一条会得到最多的最终现金,所以,想要让最后的收益最大,那么所有现金流都必须汇集到最“挣钱”的路线中,所以,我们需要 求一条最佳路线从第一轮到最后一轮,得出每一轮需要选择的某一种股票或者现金即可即可。可以动态规划*/ int main() { int n = 0; int m = 0; double p = 0; cin >> n >> m >> p; vector<vector<double>> prices; for (int i = 0; i < m; ++i) { prices.push_back(vector<double>()); for (int j = 0; j < n; ++j) { double x = 0; cin >> x; prices.back().push_back(x); } } double final = StockGod(n, m, p, prices); printf("%.1f\n", final); return 0; }
点赞 回复 分享
发布于 2017-04-27 09:18
如果是垂直遍历二叉树,输入1的时候为啥是l和i这两个节点,求指教这题的意思。
点赞 回复 分享
发布于 2017-04-27 09:17
第一题感觉是买入当天收益最大得一支,第二天抛出,买入第二天收益最大的一支股票,如果两天是同一支就不用抛出这个过程了
点赞 回复 分享
发布于 2017-04-27 07:43
你第二题过了多少啊?
点赞 回复 分享
发布于 2017-04-26 23:02
不会吧,笔试题目还要看代码?他们有功夫看?
点赞 回复 分享
发布于 2017-04-26 22:23

相关推荐

点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
SmileDog12138:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
05-16 09:20
已编辑
中国民航大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务