#45065: Python有點暴力但直觀的方法


chuo.961018@gmail.com (卓泓丞)

學校 : 桃園縣立壽山高級中學
編號 : 259074
來源 : [118.168.16.109]
最後登入時間 :
2025-01-05 21:27:39
q182. 2. 字串操作 -- 2025年1月APCS | From: [118.168.16.109] | 發表日期 : 2025-01-05 20:32

可以用條件判斷先分三類再將字串依據題目做變化

如果想要美觀一點可以用自定義函數,參考如下

(一定有更好或簡單的方法,僅供參考◉⁠‿⁠◉)

def a(x):

    s=""

    for i in range(len(x)):

        if i%2==0:

            s+=x[i+1]

        else:

            s+=x[i-1]

    return s        

 

def b(x):

    s=""

    for i in range(len(x)//2):

        ss=[x[2*i],x[2*i+1]]

        ss.sort()

        for j in ss:

            s+=j

    return s

 

def c(x):

    s=""

    s1=x[0:len(x)//2:1]

    s2=x[len(x)//2::]    

    for i in range(len(x)//2):

        s+=s1[i]

        s+=s2[i]

    return s

 
#45066: Re: Python有點暴力但直觀的方法


chuo.961018@gmail.com (卓泓丞)

學校 : 桃園縣立壽山高級中學
編號 : 259074
來源 : [118.168.16.109]
最後登入時間 :
2025-01-05 21:27:39
q182. 2. 字串操作 -- 2025年1月APCS | From: [118.168.16.109] | 發表日期 : 2025-01-05 20:40

可以用條件判斷先分三類再將字串依據題目做變化

如果想要美觀一點可以用自定義函數,參考如下

(一定有更好或簡單的方法,僅供參考◉⁠‿⁠◉)

 

def a(x): #代號0的兩兩交換

    s=""

    for i in range(len(x)):

        if i%2==0:

            s+=x[i+1]

        else:

            s+=x[i-1]

    return s        

 

def b(x):  #代號1的兩兩排序

    s=""

    for i in range(len(x)//2):

        ss=[x[2*i],x[2*i+1]]

        ss.sort()

        for j in ss:

            s+=j

    return s

 

def c(x):  #代號2的完美重排

    s=""

    s1=x[0:len(x)//2:1]

    s2=x[len(x)//2::]    

    for i in range(len(x)//2):

        s+=s1[i]

        s+=s2[i]

    return s

 

s=input()

k=int(input())

for i in range(k):

    n=int(input())

    if n==0:

        s=a(s)

    elif n==1:

        s=b(s)

    else:

        s=c(s)

print(s)        

 
#45080: Re: Python有點暴力但直觀的方法


kerochen391@gmail.com (KeroChen)

學校 : 高雄市立高雄高級中學
編號 : 216669
來源 : [42.77.214.28]
最後登入時間 :
2024-12-03 10:17:52
q182. 2. 字串操作 -- 2025年1月APCS | From: [42.77.178.97] | 發表日期 : 2025-01-06 08:53

可以用條件判斷先分三類再將字串依據題目做變化

如果想要美觀一點可以用自定義函數,參考如下

(一定有更好或簡單的方法,僅供參考◉⁠‿⁠◉)

def a(x):

    s=""

    for i in range(len(x)):

        if i%2==0:

            s+=x[i+1]

        else:

            s+=x[i-1]

    return s        

 

def b(x):

    s=""

    for i in range(len(x)//2):

        ss=[x[2*i],x[2*i+1]]

        ss.sort()

        for j in ss:

            s+=j

    return s

 

def c(x):

    s=""

    s1=x[0:len(x)//2:1]

    s2=x[len(x)//2::]    

    for i in range(len(x)//2):

        s+=s1[i]

        s+=s2[i]

    return s


我自己是加了遇到兩個兩兩交換直接跳過

以及連續的兩兩排序可以只做一次

 
#45095: Re: Python有點暴力但直觀的方法


chuo.961018@gmail.com (卓泓丞)

學校 : 桃園縣立壽山高級中學
編號 : 259074
來源 : [118.168.16.109]
最後登入時間 :
2025-01-05 21:27:39
q182. 2. 字串操作 -- 2025年1月APCS | From: [114.137.9.237] | 發表日期 : 2025-01-06 19:22

可以用條件判斷先分三類再將字串依據題目做變化

如果想要美觀一點可以用自定義函數,參考如下

(一定有更好或簡單的方法,僅供參考◉⁠‿⁠◉)

def a(x):

    s=""

    for i in range(len(x)):

        if i%2==0:

            s+=x[i+1]

        else:

            s+=x[i-1]

    return s        

 

def b(x):

    s=""

    for i in range(len(x)//2):

        ss=[x[2*i],x[2*i+1]]

        ss.sort()

        for j in ss:

            s+=j

    return s

 

def c(x):

    s=""

    s1=x[0:len(x)//2:1]

    s2=x[len(x)//2::]    

    for i in range(len(x)//2):

        s+=s1[i]

        s+=s2[i]

    return s


我自己是加了遇到兩個兩兩交換直接跳過

以及連續的兩兩排序可以只做一次

這樣遇到很多組的效率應該可以更好!👍

 
ZeroJudge Forum