(C卷,100分)- 最大股票收益(Java & JS & Python & C)

题目描述

假设知道某段连续时间内股票价格,计算通过买入卖出可获得的最大收益。

输入一个大小为 n 的数 price(p1,p2,p3,p4…….pn),pi 是第i天的股票价格。

pi 的格式为股票价格(非负整型)加上货币单位 Y 或者 S,其中 Y 代表人民币,S 代表美元,这里规定 1 美元可以兑换 7 人民币。

Pi 样例 1:123Y 代表 123 元人民币

pi 样例 2:123S 代表 123 元美元,可兑换 861 人民币。

假设你可以在任何一天买入或者卖出股票,也可以选择放弃交易,请计其在交易周期 n 天内你能获得的最大收(以人民币计算)。

输入描述

输入一个包含交易周期内各天股票价格的字符串,以空格分隔。不考虑输入异常情况。

输出描述

输出一个整型数代表在交易周期 n 天内你能获得的最大收益,n 不能超过 10000

备注:股票价格只会用 Y 人民币或 S 美元进行输入,不考虑其他情况。

用例

输入 2Y 3S 4S 6Y 8S
输出 76
说明

题目解析

本题其实少了一句话,那就是,手上只能保留一只股票,不能保留多只股票。

如果可以保留多只股票,则用例2Y 3S 4S 6Y 8S,我前四个全要,即有四只股票,然后全部以8S价格卖出,那么最大利润为 8S * 4 – (2Y + 3S + 4S + 6Y) = 167,而不是76。

用例中的76输出,前提是手上只能保留一只股票。

即:

2Y买进,3S卖出,赚19

3S买进,4S卖出,赚7

6Y买进,8S卖出,赚50

共转76

这是一种贪心思维,即买涨不买跌,这样就稳赚不赔了。如上折线图,只买上升区段,不买下跌区段。

本题和

相同,题解请看链接博客说明。

JavaScript算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  const arr = line.split(" ").map((price) => {
    const num = parseInt(price.substring(0, price.length - 1));
    return price.at(-1) === "Y" ? num : num * 7;
  });

  console.log(getResult(arr));
});

function getResult(arr) {
  let ans = 0;
  for (let i = 1; i < arr.length; i++) {
    ans += Math.max(0, arr[i] - arr[i - 1]);
  }
  return ans;
}

Java算法源码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
  // 输入获取
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    Integer[] arr =
        Arrays.stream(sc.nextLine().split(" "))
            .map(
                p -> {
                  int num = Integer.parseInt(p.substring(0, p.length() - 1));
                  String unit = p.substring(p.length() - 1);
                  return "Y".equals(unit) ? num : num * 7;
                })
            .toArray(Integer[]::new);

    System.out.println(getResult(arr));
  }

  // 算法入口
  public static int getResult(Integer[] arr) {
    int ans = 0;
    for (int i = 1; i < arr.length; i++) {
      ans += Math.max(0, arr[i] - arr[i - 1]);
    }
    return ans;
  }
}

Python算法源码

# 输入获取
tmp = input().split()


# 输入转换
def convert(s):
    num = int(s[:-1])
    unit = s[-1]

    if unit == 'Y':
        return num
    else:
        return num * 7


arr = list(map(convert, tmp))


# 算法入口
def getResult():
    ans = 0
    for i in range(1, len(arr)):
        ans += max(0, arr[i] - arr[i - 1])
    return ans


# 算法调用
print(getResult())

C算法源码

#include <stdio.h>

#define MAX(a,b) ((a) > (b) ? (a) : (b))

#define MAX_SIZE 10000

int main() {
    int incomes[MAX_SIZE];
    int incomes_size = 0;

    int num;
    char unit;

    while(scanf("%d%c", &num, &unit)) {
        incomes[incomes_size] = num * (unit == 'Y' ? 1 : 7);
        incomes_size++;
        if(getchar() != ' ') break;
    }

    int ans = 0;
    for(int i=1; i<incomes_size; i++) {
        ans += MAX(0, incomes[i] - incomes[i-1]);
    }

    printf("%dn", ans);

    return 0;
}

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?