close
Content

3025這個4位數相當特別。如果你把他從中間切開你會得到2個長度相同的數30,25。而且此2數和的平方恰等於原來的數,我們稱這種數為quirksome number。

(30+25)2=3025

這個問題是:給你N位數(N=2,4,6,8),要找出符合以上性質的所有數。
For example:4位數就是從0000到9999。注意:數字前方的0也要算在內。也就是說0001等於 (00+01)2 ,是一個4位數的quirksome number。

Input

輸入可能包含了好幾列測試資料,每一列只有一個數字N(N=2,4,6,8),代表要求的是幾位數的quirksome number。

Output

對每一個輸入N,你應該要輸出所有N位數的quirksome number,每個一行,由小到大排列。注意:數字前方的0不可忽略,例如2位數中的quirksome number 01不可只輸出1。

Sample Input #1
2
2
Sample Output #1
00
01
81
00
01
81

python:

"""
#這是TLE版
"""
while True:
    try:
        n=int(input())
        n1=(10**n)-1
        arr=[str(x).zfill(n)for x in range(10**n)]
        #print(arr)

        arr2=[]#裝符合的數字
        for i in arr:
            i_len=len(i)//2
            pre_i=int(i[:i_len])
            #print(pre_i)
            pas_i=int(i[i_len:])
            #print(pas_i)
            if((pre_i+pas_i)**2==int(i)):arr2.append(i)
        print(*arr2,sep='\n')
    except:
        break

 

 

"""
這是AC版
"""
while True:
    try:
        n=int(input())
        n1=10**(n//2)#我讓她跑的時間
        """
        N = 2, k = 0 ~ 9
        N = 4, k = 00 ~ 99
        N = 6, k = 000 ~ 999
        N = 8, k = 0000 ~ 9999
        """
        arr=[str(x).zfill(n)for x in range(n1)]
        """
        這裡給2會輸出 ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09']
        """
        #print(arr)
        arr2=[]#裝符合的數字
        for j in arr:
            i=str(int(j)**2).zfill(n) 
            #這裡便利的每一個元素要先做平方,然後再去做處理
            i_len=len(i)//2
            pre_i=int(i[:i_len])
            #print(pre_i)
            pas_i=int(i[i_len:])
            #print(pas_i)
            if((pre_i+pas_i)**2==int(j)**2):arr2.append(i)
        print(*arr2,sep='\n')
    except:
        break
arrow
arrow
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()