2017年4月26日 阿里巴巴笔试编程题 股票
来源:互联网 发布:鸟哥linux私房菜基础篇 编辑:程序博客网 时间:2024/05/21 09:50
题目:
题目所给的代码:
#include <iostream>#include <vector>#include <cstdio>#include <algorithm>using namespace std;/*请完成下面这个函数,实现题目要求的功能*//*当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ *//******************************开始写代码******************************/double StockGod(int n, int m, double p, const vector<vector<double>>& prices){}/******************************结束写代码******************************/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;}
题目的意思是有n个股票,有m个交易期可以交易,问1元最多可以变成多少元
我刚开始的思路是,只选择1个股票,在每个交易期选择买入或者卖出,最后看最大收获是多少
代码:
double StockGod(int n, int m, double p, const vector<vector<double>>& prices){double ans = 1, a = 1, b = 1;for (int j = 0; j < n; j++){a = 1, b = 1;for (int i = 1; i < m; i++){if (prices[i][j] >= prices[i - 1][j])b *= prices[i][j] /prices[i - 1][j];else{if (b*(1 - p)>1)a *= b*(1 - p);b = 1;}}if (b*(1 - p)>1)a =a* b*(1 - p);if (ans < a)ans = a;}return ans;}
通过率是60%
仔细一想,这个思路是不行的,比如下面的输入示例
2 3 0.1
1 2 1 3 2 3
所以我新的思路是,手中的股票不一定一直是同一个股票,可以换,但是要保证手中永远只有一种股票(或者只有现金)
代码:
double StockGod(int n, int m, double p, const vector<vector<double>>& prices){int k = -1;double ans = 1-p, a = 1;for (int j = 0; j < n; j++)if (a < prices[1][j] / prices[0][j]){a = prices[1][j] / prices[0][j];k = j;}ans *= a;for (int i = 2; i < m; i++){a = 1;if (a < prices[i][k] / prices[i-1][k])a = prices[i][k] / prices[i-1][k];for (int j = 0; j < n; j++)if (a < prices[i][j] / prices[i-1][j]*(1-p)){a = prices[i][j] / prices[i-1][j] * (1 - p);k = j;}ans *= a;}return ans>1?ans:1;}
通过率还是60%
我感觉正确的解答应该是动态规划,但是没想出来怎么实现。
0 0
- 2017年4月26日 阿里巴巴笔试编程题 股票
- 2017年4月26日 阿里巴巴笔试编程题 调度算法
- 阿里巴巴2014年3月29日笔试题
- 阿里巴巴4月1日前端笔试
- 2014年3月30日阿里巴巴实习生笔试(北京站)
- 阿里巴巴2013实习招聘笔试题5月19日
- 阿里巴巴9月14日北京校园招聘笔试题
- 3月29日阿里巴巴实习生笔试题
- 2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
- 2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
- 2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
- 2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
- 2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
- 2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
- 2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
- 阿里巴巴2013年9月14日笔试题最后一题(Java部分上一题)
- 2013年5月19日阿里巴巴笔试题-字符串逆序
- 阿里巴巴2014校招笔试题-2013年9月14日
- servlet
- nec css规范
- spring和hibernate整合遇到的问题
- 无人与我立黄昏,无人问我粥可温。
- Android开发-高级网络组件(2)使用Volley加载网络图片-AndroidStudio
- 2017年4月26日 阿里巴巴笔试编程题 股票
- 利用SSL For Free工具3分钟获取Let's Encrypt免费SSL证书(https免费证书)
- 查看linux操作系统版本号,查看glibc版本号
- jsp笔记
- linux 出现大量TIME_WAIT
- Git命令大全及相关概念
- matlab:常用内置函数
- promise是什么,使用方法
- CodeForces 643 A.Bear and Colors(水~)