iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 26
0
自我挑戰組

程式設計師大冒險系列 第 26

[26/150]UVa10057 - 圖解說明(下集)

  • 分享至 

  • xImage
  •  

現在犯錯,總比考試時犯錯來的好。

大綱

  • 更正啟事
  • 程式碼
  • 總結

更正啟事

很抱歉造成錯誤說明
output應該是中位數最小值、符合中位數條件總數、符合中位數條件

程式碼10057 - A mid-summer night's dream.

時間超時,會再思考更佳演算法。

import sys

def test(fun):
    #總開關
    if(1):
        return 1
    #單項開關
    if(fun=="inp"):
        return 0
    if(fun=="dist"):
        return 1

控制監測程式,這次多了總開關。

#主程式
def main ():
    inp()

#讀取測資   
def inp():
    sinput=sys.stdin.readline()
    while(sinput!=""):
        sinput=sinput.replace("\r","").replace("\n","")
        casenum=int(sinput)
        allnum=[]
        #測資總數字
        for i in range(casenum):
            nums=sys.stdin.readline().replace("\n","")
            allnum.append(int(nums))
        if(test("inp")):print(allnum)
        dist(allnum,casenum)
        sinput=sys.stdin.readline()

while讀取直到測資為無
for讀取測資小題第一行變數,迴圈直到那個數字。

def dist(h,num):
    distance=0
    #排序
    for i in range(num):
        for j in range(num-i-1):
            if h[j]>h[j+1]:
                h[j],h[j+1]=h[j+1],h[j]
    print(h) 
    #中位數判斷
    nummi=int(num/2)
    med=h[nummi-1]
    mednx=h[nummi]
    #符合中位數條件
    if(num%2==0):
        ifmed=h[nummi]-h[nummi-1]+1
    else:
        ifmed=1
    #符合中位數
    medct=0
    for cti in range(num):
        if(h[cti]==med):
            medct+=1
        else:
            if(h[cti]==mednx):
                medct+=1
    print("{0} {1} {2}".format(med,medct,ifmed))
    
main()

答案分為三個,所以分成三段計算,增加程式易讀性。


總結

這次刷題拿以前的程式碼來改,發現有些地方看起來吃力。
讓我了解到註解重要,近期會在加強這方面知識。
感謝撥冗閱讀


上一篇
[25/150]UVa10057 - 圖解說明(上集)
下一篇
[27/150]將資料做預處理10415 - Eb Alto Saxophone Player
系列文
程式設計師大冒險115
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言