iT邦幫忙

0

請問一下這一題曜怎麼寫?(python)

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220519/20149019ZRLOv799cH.png

echochio iT邦高手 1 級 ‧ 2022-05-19 20:03:18 檢舉
不懂就問老師呀.....
glj8989332 iT邦研究生 4 級 ‧ 2022-05-19 20:28:56 檢舉
你連打字都有錯...這伸手伸得太誇張
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
海綿寶寶
iT邦大神 1 級 ‧ 2022-05-19 22:04:06
最佳解答

1.這題先前已經問了兩次,都問不到答案才來貼題目
2.這不是作業,這是程設競賽的題目(國中組的題目),會的人可以寫寫看

以下拋個磚引個玉

https://ithelp.ithome.com.tw/upload/images/20220519/200017875enCgs9Trt.png

https://ithelp.ithome.com.tw/upload/images/20220519/20001787U2c3scT2zu.png

import sys

def oneday(lst, max):
    ret = []
    for i in lst:
        ret.append(min(i+1,max))
        for j in range(i):
            ret.append(1)
    return ret
    
def onecase(n, k):
    lstv = [1]
    
    for i in range(n):
        lstv = oneday(lstv, k)
        if len(lstv) > 98765432123456789:
            return 98765432123456789
    
    return(len(lstv))    

for line in sys.stdin:
    nk = line.split()
    if len(nk) == 2:
        n = int(nk[0])
        k = int(nk[1])
        print(onecase(n, k))
看更多先前的回應...收起先前的回應...

這題沒明確定義,每天增加的等級,那就是NULL,既然是NULL,那就是NULL到底了.

等級每天增加1,不超過上限k

完整題目可參考原始題目(Q4)

淺水員 iT邦大師 6 級 ‧ 2022-05-20 00:54:29 檢舉

考慮到 k 很大或是 n 很大的狀況

def onecase(n, k):
    lstv = [1]
    total = 1
    count = 1
    m = min(n+1, k)
    # 第一階段:1 ~ k-1 天,此時 lstv 長度會到 k
    for i in range(1, m):
        addVal = 0
        for j in range(count):
            addVal += lstv[j] * (i - j)
        lstv.append(addVal)
        count = count + 1
        total += addVal
        if total >= 98765432123456789:
            return 98765432123456789
    # 第二階段:k-1 ~ n 天,不再增加 lstv 長度
    for i in range(m, n+1):
        addVal = lstv[k-1]
        for j in range(k-1):
            addVal += lstv[j] * (k - j)
            lstv[j] = (lstv[j+1] if j > 0 else lstv[j+1] + lstv[j])
        lstv[k-1] = (addVal if k > 1 else addVal + lstv[k-1])
        total += addVal
        if total >= 98765432123456789:
            return 98765432123456789
    return total

考慮到 k 很大或是 n 很大的狀況

可能有點誤會
n 是天數;k 是等級上限
而 k 並不必然小於 n

淺水員一級屠豬士
題外話
兩位最近還有看過因追蹤而接收的「站內通知」(右上角紅鈴噹)嗎
我已經一個禮拜沒看過了
懷疑是自己的問題
/images/emoticon/emoticon06.gif

淺水員 iT邦大師 6 級 ‧ 2022-05-20 08:58:06 檢舉

海綿寶寶
我注釋的方式會讓人誤會
如果 k > n 的話
第二階段的迴圈其實不會跑,會直接結束回傳
拿一些資料測試,目前跟你的輸出是一樣的

for n in range(5):
    for k in range(1,5):
        if onecase(n, k) == onecaseOrig(n, k):
            print("n={}, k={} pass".format(n,k))
        else:
            print("[err] n={}, k={} diff".format(n,k))

站內通知部分我收到最近的是 5/11
不過我好像比較少用回答,所以不知道正常不正常

淺水員
了解, 是我誤會了

站內通知部分我收到最近的是 5/11

我也是
可能站方把造成 502 Bad Gateway 的兇手給砍了

淺水員一級屠豬士
如果二位有看到這個通知,就表示
先前因 502 而關掉的功能
又回歸了
/images/emoticon/emoticon34.gif

淺水員 iT邦大師 6 級 ‧ 2022-05-27 10:01:09 檢舉

回來了(仰望天空)

2
淺水員
iT邦大師 6 級 ‧ 2022-05-19 20:48:59

數學方面給你參考:
https://ithelp.ithome.com.tw/upload/images/20220519/20112943fOnakiWvfo.png

不過這不適合用在 k 很大的狀況

2
一級屠豬士
iT邦大師 1 級 ‧ 2022-05-19 21:03:59

卡關,具體說出哪裡不懂,或是卡住的地方,很多人都會幫忙.
若真的毫無頭緒,或是無法表達出來,可以多尋求另外的管道吧.

https://www.facebook.com/groups/2276905072551692

我要發表回答

立即登入回答