iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
自我挑戰組

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

[20/150]排序解題(Python)之九乘九乘法迴圈進階

青春是一列不停歇的火車,今天就來解火車題目。如果說九乘九乘法是迴圈基本題型,那麼這題就是迴圈進階運用,如果還不會九乘九乘法,建議先複習迴圈。

大綱

前置技能

請用迴圈寫出九乘九乘法,如下圖
https://ithelp.ithome.com.tw/upload/images/20181020/20091910rY9POlKUcp.jpg
不求整齊乾淨輸出,只要可以輸出就可以
之後會再討論排版整齊要怎麼做


299 Train Swapping

import sys
        
def inp():
    numcase=int(sys.stdin.readline())#第一列總共幾台火車
    for i in range(numcase):
        numtest=int(sys.stdin.readline().replace("\n",""))#火車節數
        test=sys.stdin.readline().replace("\n","")
        test=list(map(int,test.split()))
        print("test=",test)
        print("Optimal train swapping takes {0} swaps.".format(swap(numtest,test)))
        print("===========")             

測資讀取

def swap(num,test):
    count=0
    print("i_range({0})".format(num))
    for i in range(num):#總共比num輪
        print("j_range({0})".format(num-i-1))
        for j in range(num-i-1):#每輪比num-i-1次
            print("i={4} j={0}  test[{0}]={1} test[{2}]={3}".format(j,j+1,test[j],test[1+j],i))
            if(test[j]>test[1+j]):#如果這個數字比排在他後面的大,那麼跟後面的數字做交換
                test[j],test[1+j]=test[1+j],test[j]
                count+=1
                print("swap count=",count)
        print(test)
        print("----")
    return count

inp()     

https://ithelp.ithome.com.tw/upload/images/20181020/20091910WTvfhgzp0D.jpg


總結

這邊是用氣泡排序法,每輪比的次數會逐漸遞減一。
因為每輪比的次數不一樣,所以迴圈上要設定變數。
感謝撥冗閱讀


上一篇
[19/150]幾何座標解題(Python)
下一篇
[21/150]踩地雷(Python)
系列文
程式設計師大冒險50

尚未有邦友留言

立即登入留言