
2025.3.22
3道编程,考试时长150分钟,共300分,一天内任意时间可答题
没有选择题简直太好了
编程语言c, c++, java皆可,我使用的java
1. 给出每天的股价与本金,输出最大利益的买卖股票操作与最终收益(保留4位小数),n天,m支股票,k元初始资金
遍历股价矩阵,记录每天的收益率最高的股票:(m[i+1][j]-m[i][j])/m[i][j]
如果收益率都不超过0,记录操作-1,否则更新当前资本:asset*m[i+1][j]/m[i][j],记录操作的股票 j
2. 矩阵实现2048游戏,0表示空位置,其它位置为2的0-n次方,要求输出实现了向上,左,下,右移动操作后的矩阵
以向上操作为例,实现步骤为
(1)将所有非0元素依次移到最上方
(2)遍历每一列,从上往下合并相邻相同元素的值:m[i][j]*=2; m[i+1][j]=0;
(3)再次将所有非0元素移到最上方
向左,下,右操作同理
3. 解方程Ax+By+Cz+Dw=N,输入ABCDN,要求输出满足方程的第一组解x, y, z, w(0<=xyzw<=2500),无解输出-1
首先4重for循环遍历,意料之中的超时
再优化,直接计算w=N-Ax-By-Cz,减少1重循环,且每层循环和超过N时终止,还是超时
干脆用哈希表存储Cz+Dw的所有可能值(key为Cz+Dw,value为int[2],即对应的z, w),2重循环xy后在哈希表找值,过了
时间复杂度O(2500^2)