2017年12月25日 星期一

b026: 股海浮沈

b026: 股海浮沈
股票是一種金融商品,每天的價格由市場機制來決定,如果能夠在股價的最低點買入,然後在最高點賣出,自然可以獲利不少,可惜大部分的人都無法預測它的高點以及低點,於是常常「追高殺低」,最後落得血本無歸。
現在我們將問題轉換一下,如果給你某一支股票在一段時間內每日的漲跌幅,在不考慮額外收取手緒費以及證交稅的情況下(不懂股票交易者請忽略這一句), 你選擇從其中一天的開盤買入,並在某一天的收盤賣出(可當天賣出),這樣交易一次,最多可獲利多少錢。
輸入說明:
一開始有一個正整數 N (2<=N<=100),代表總共有幾個交易日,接下來有 N 個整數則是這 N 個交易日的漲跌幅。
輸出說明:
請輸出最大的獲利是多少,如果無法獲利,則輸出 0。
範例輸入:
輸入1:
3 -1 -2 -3

輸入2:
5 2 -1 3 -5 2
範例輸出 :
輸出1:
0

輸出2:
4

"""
[動規] 最大連續元素和(Maximum Consecutive Sum)
基本定義:輸入一串長度為n的整數序列,求最大連續和的值。

    輸入
        第一行有一個數字n (1<=n<=100)
        第二行有n個數字
    輸出
        一行,代表最大連續和的值
    範例輸入
        5
        2 -1 5 -4 3
    範例輸出
        6

可以畫一個表格來看...

         2  -1  5  -4   3
sum  2   1  6   2   5
max  2   2  6   6   6

         -3  1   4   3  -1
sum -3  1   5   8   7     //sum<0時 sum歸零
max -3  3   5   8   8

等於是列出一個表,然後放連續元素和sum和最大連續元素和max
而當sum<0時 sum就歸零

這樣就可以得到最後的max了。"""

# 輸入多行資料
# get multiline input from user [duplicate]



lines = []
print("請輸入文數字  或按enter結束")
while True:
    line = (input())
    if line:
        lines.append(int(line))
    else:
        break
text = '\n'.join(str(lines))

print()
print("輸入資料",lines)

list1=[]
sum1=0

for i in range (0,len(lines)):
    sum1=sum1+int(lines[i])
    list1.append(sum1)
print()   
print("獲利是",list1)
if max(list1) <= 0:
    print("獲利= 0")
else:         
    print("最大的獲利是",max(list1))




========= === RESTART: F:/Python_APSC/b026.py ======================
請輸入文數字  或按enter結束
2
-1
3
-5
2


輸入資料 [2, -1, 3, -5, 2]

獲利是 [2, 1, 4, -1, 1]
最大的獲利是 4
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...