總網頁瀏覽量

顯示具有 105學年度台中區資訊能力競賽程式題 標籤的文章。 顯示所有文章
顯示具有 105學年度台中區資訊能力競賽程式題 標籤的文章。 顯示所有文章

2018年2月5日 星期一

105學年度台中區資訊能力競賽程式題Q1(計算字串間隔距離)

給定一個由大小寫英文字母所組成的字串以及一個英文字母,請輸出該字母在這個字串中出
現的間隔距離,如
ABCDAAEFeDaBDCBCBcBCbCBBd
A
4 1 5

Python code:
m=input() #輸入字串
a=input() #輸入字母
b=[]#存入各字母編號
for i in range(len(m)):
    if m[i]==a.upper() or m[i]==a.lower():
        b.append(i)
for j in range(len(b)-1):
    print(b[j+1]-b[j],end=' ')
 

2018年2月4日 星期日

105學年度台中區資訊能力競賽程式題Q3(2^k的4個自然數表示法)

Lagrange's four-square theorem:每個正整數均可表示為4個整數平方
 ==>  m^2=a^2+b^2+c^2+d^2
(大陸第七屆藍橋杯試題)

Python code:

import time
m=int(input()) #輸入一正整數,找出所有的四平方和表示法
aa=int(m**0.5)+1
flag=0
start=time.clock()
for a in range(0,aa):
    bb=int((m-a*a)**0.5)+1
    for b in range(a,bb):
        cc=int((m-a*a-b*b)**0.5)+1
        for c in range(b,cc):
            d=int((m-a*a-b*b-c*c)**0.5)
            if a*a+b*b+c*c+d*d==m :   
                 flag+=1
                 if flag==1:
                    print(a,b,c,d)
                    end=time.clock()
                    print('It costs time',end-start,'seconds')


@ 正整數化四平方和的解數不一定只有唯一解
     如10=0^2+0^2+1^2+3^2
            =1^2+1^2+2^2+2^2

😺 以下的程式碼是可以找出由小到大排列的a、b、c、d的所有組數:




@藍橋杯規定只需找出一組解就好但執行時間不得超過3秒,
    所以必須優化,原本必須要4個for-loop,但最後一個迴圈
    可省略,讓d=m-a^2-b^2-c^2就好,本人測試過773535,
    如果是4個迴圈,需時22秒,但改成3個,時間縮短成0.36
    秒,大大提升效率。