顯示具有 python 標籤的文章。 顯示所有文章
顯示具有 python 標籤的文章。 顯示所有文章

2020年8月14日 星期五

Python f-strings 格式化

通過位置
data = ['data1', 'data2']
# format
print("data1: {0}, data2: {1}".format(*data))
# f-strings
print(f"data1: {data[0]}, data2: {data[1]}")
通過關鍵字
personal = {"name": "Json", "age": 12, "sex": "M"}
# format
print("Name: {name}, age: {age}, sex: {sex}".format(**personal))
# f-strings
print(f"Name: {personal['name']}, age: {personal['age']}, sex: {personal['sex']}")
數據精度和類型
num = 23234.76686566
# 保留两位小数
print(f"{num:.2f}")
# 保留两位小数,十个占位符,不足的使用0补充
prinf(f"{num:010.2f}")
填充和對齊經常是一起使用的
personal = {"name": "Json", "age": 12, "sex": "M"}
# format
print("Name: {name:>5}, age: {age:>5}, sex: {sex:>5}".format(**personal))
# f-strings
print(f"Name: {personal['name']:^10}, age: {personal['age']:^10}, sex: {personal['sex']:^10}")
使用!r可以給字符串添加引號
a = "abc"
b = "hjk"
# format
c = "{!r} -- {!r}".format(a, b)
===> "'abc' -- 'hjk'"
# f-string
c = f"{a!r} -- {b!r}"
===> "'abc' -- 'hjk'"
https://www.jianshu.com/p/7ea6d095dbdf

2020年8月1日 星期六

Notepad++ & python

Notepad++ 背景主題設定





Notepad++ 自動補完程式碼的功能


Notepad++ 執行 python 程式碼


輸入 python -i $(FULL_CURRENT_PATH)

另一個方法是在執行的輸入框輸入以下
cmd /k python $(FULL_CURRENT_PATH)

安裝外掛 Python Indent 


需自行 Enable


這樣設定後 Notepad++ 在設計 python 時應該就比較好用了

2020年5月3日 星期日

[C_MM250-易] 汽車油耗

[C_MM250-易] 汽車油耗

成績: 0 / 倒扣: 0.8
問題描述 :
一部汽車油箱容量為m公升,假如汽車行駛時每分鐘油耗為n公升,試問剛加滿油的汽車能行駛多少小時。例如,汽車油箱容量為24公升,汽車行駛時每分鐘油耗為0.04公升, 當此輛汽車加滿油後,能行駛多10.0小時。
輸入說明 :
輸入兩個數,用空白分開,依序代表汽車油箱容量及每分鐘油耗量。
例如:
24 0.04
輸出說明 :
輸出汽車行駛的小時數 ( 計算到小數 1 位,以下四捨五入 ) 。
例如:
10.0
範例 :

輸入範例輸出範例
24 0.0410.0
36 0.0610.0
36 0.0512.0

while True:  
    try:  
        m, n = map(float,input().split())  
        print(round(m / n / 60,1))  
    except(EOFError):  
        break

2020年5月2日 星期六

[C_MM249-易] 硬幣付錢方式

[C_MM249-易] 硬幣付錢方式

成績: 0 / 倒扣: 0.8
問題描述 :
小明某一天要去吃麵,已知身上只有 5 元、 10 元、 50 元硬幣各 4 個,假設一碗麵為 n 元,不可以找零錢,則他可以有幾種硬幣組合付錢方式呢 ? 請將所有可能的組合列出,每種組合,請列出 5 元、 10 元、 50 元硬幣各硬幣所需的數量;每種組合 ( 每一列 ) 由大到小排列。若無法付錢時,則輸出 null 。
例如一碗麵為 10 元答案如下 (5 元硬幣數量 , 10 元硬幣數量 , 50 元硬幣數量 ) :
2,0,0
0,1,0
輸入說明 :
輸入 1 整數,代表 1 碗麵的價錢。
例如:
10
輸出說明 :
列出所有可能的組合列出,每種組合。請列出 5 元、 10 元、 50 元硬幣各種硬幣所需的數量,用逗號分隔。每種組合 ( 每一列 ) 由大到小排列。若無法付錢時,則輸出 null 。
例如,輸出為:
2,0,0
0,1,0
範例 :

輸入範例輸出範例
102,0,0
0,1,0
253,1,0
1,2,0
2504,3,4
2,4,4
500null

m = int(input())
result = []
for i in reversed(range(0, 5)):
    for j in reversed(range(0, 5)):
        for k in reversed(range(0, 5)):
            if i*5 + j*10 + k*50 != m:
                continue
            else:
                result.append([i,j,k])
if len(result) == 0:
    print('null')
else:
    for i in range(len(result)):
        strs = ''
        for j in result[i]:
            strs += str(j)+','
        print(strs.strip(','))

[C_MM248-易] 貝氏法則

[C_MM248-易] 貝氏法則

成績: 0 / 倒扣: 0.8
問題描述 :
三個相同的盒子各裝有下列水果
盒子一 : 蘋果 3 個 哈密瓜 2 個 藍莓 3 個
盒子二 : 蘋果 6 個 哈密瓜 5 個 藍莓 5 個
盒子三 : 蘋果 9 個 哈密瓜 8 個 藍莓 7 個
今由任一盒中隨機抽出一水果,已知此抽出的水果為蘋果 , 則其自第三盒抽出的機率為何 ?
P(A) 代表水果從第 3 盒抽出的機率
P(B) 代表抽到 蘋果的機率
P( A ∩ B ) 代表從第 3 盒抽到 蘋果的機率
P(A| B) 代表抽到蘋果的條件下,並從第 3 盒抽出的機率。
已知貝氏法則為 P(A |B) = P( A ∩ B )/P(B)
P(A)= 1/3 = 0.33
P(B) = 1/3 * 3/8 + 1/3 * 6/16 + 1/3 * 9/24= 0.375
P( A ∩ B ) = 1/3 * 9/24 = 0.125
P(A | B) = 0.125/(1/3 * 3/8 + 1/3 * 6/16 + 1/3 * 9/24) = 0.333
計算任意 3 個盒子,每一盒中裝有許多蘋果、哈密瓜及藍莓,今由任一盒中隨機抽出一水果,已知此抽出的水果為蘋果 , 則其自第三盒抽出的機率為何 ?
輸入說明 :
輸入 3 列數字代表第 1 、 2 及 3 個水果盒,每一列數字用逗號分隔,依序代表 蘋果、 哈密瓜及藍莓的個數。
例如:
3,2,3
6,5,5
9,8,7
輸出說明 :
計算「出抽出的水果為蘋果 , 其自第三盒抽出的機率」 ( 取到小數點後 3 位 )
例如,輸出為:
0.333 ( 取到小數點後 3 位 )
範例 :

輸入範例輸出範例
1,2,3
4,5,6
7,8,9
0.333
17,13,4
9,11,6
8,14,13
0.213
4,7,9
6,9,9
9,6,7
0.476

while True:  
    try:  
        x = list(map(int,input().split(',')))  
        y = list(map(int,input().split(',')))  
        z = list(map(int,input().split(',')))  
        PA = 1/3  
        PB = PA*(x[0]/sum(x) + y[0]/sum(y) + z[0]/sum(z))  
        PAAB = PA*(z[0]/sum(z))  
        PAOB = PAAB/PB  
        print('%.3f' % round(PAOB,3))  
    except(EOFError):  
        break

2020年5月1日 星期五

[C_MM247-易] 環狀排列

[C_MM247-易] 環狀排列

成績: 0 / 倒扣: 0.8
問題描述 :
今天是小明的生日,他邀一群朋友去慶生 party ,已知有 n 個不同的人須圍桌而坐,且每個座位皆視為相同,只考慮每個人的相對位置關係,共有幾種座法 ?
假設 n = 3 人
則有 2 種座法
第一種 :  、 、  ( 視為同一種 )
第二種 : 、  、  ( 視為同一種 )
n 個人有 n!/n 種坐法
寫一程式計算輸入 n 個人,求共有幾種坐法 ? 若輸入是小於 0 的整數,其坐法為 0 種坐法。
輸入說明 :
輸入整數 n , n 可以是小於 0 的整數。
例如:
5
輸出說明 :
輸出共有 幾種坐法 ( 若輸入是小於 0 的整數,其坐法為 0 種坐法 ) :
例如
24
範例 :

輸入範例輸出範例
524
7720
-100

while True:  
    try:  
        num = int(input())  
        result = 1  
        if num > 0:  
            for i in range(1, num):  
                result *= i  
            print(result)  
        else:  
            print('0')  
    except(EOFError):  
        break

2020年4月30日 星期四

[C_MM246-易] 矩陣反轉

[C_MM246-易] 矩陣反轉

成績: 0 / 倒扣: 0.8
問題描述 :
請設計一程式,輸入一個陣列並且反轉後再輸出。

輸入說明 :
第一行先輸入矩陣的行、列,之後再輸入陣列元素。

輸出說明 :
反轉後的矩陣。

範例 :

輸入範例輸出範例
2 1
3
2

3 2
4 6
7 8
4 6

2 4
7 8 9 10
6 5 22 4

4 2
4 5
2 3
4 5
6 9
3 2

4 7 4
6 8 6

7 6
8 5
9 22
10 4

4 2 4 6
5 3 5 9

while True:  
    try:  
        r, c = map(int, input().split())  
        listo = []  
        for i in range(r):  
            m = list(map(int,input().split()))  
            listo.append(m)  
        for i in range(c):  
            strs = ''  
            for j in range(r):  
                strs = strs + str(listo[j][i]) + ' '  
            print(strs.strip())            
    except(EOFError):  
        break

2020年4月29日 星期三

[C_MM245-易] 找質數

[C_MM245-易] 找質數

成績: 0 / 倒扣: 0.8
問題描述 :
找出輸入範圍內的質數。

輸入說明 :
首先輸入一正整數N,代表範圍內的質數。
N < 100

輸出說明 :
輸出範圍內的質數結果,數字間需間隔一隔空白,最後換行顯示總共幾個質數。

範例 :

輸入範例輸出範例
52 3 5
3



while True:  
    try:  
        def is_prime(n):  
            i, max =2, n**0.5  
            while True:  
                if n==1:return False; break  
                if n==2:return True; break  
  
                if n % i ==0:return False; break  
                if i > max:return True; break  
                i += 1  
        N = int(input())  
        strs, j = '', 0  
        for i in range(N+1):  
            if is_prime(i):  
                strs +=str(i)+' '  
                j+=1  
        print(strs.strip())  
        print(j)  
    except(EOFError):  
        break

2020年4月26日 星期日

[C_MM45-中] 分禮物

[C_MM45-中] 分禮物

成績: 0 / 倒扣: 0.8
問題描述 :
每年的耶誕節,都會有交換禮物的活動。現在有一群人,要交換彼此的禮物,但是每個人都不能拿到自己準備的禮物,且每個人都只有會拿到一件禮物,請問共有幾種情形,並把所有可能情形印出來。

輸入說明 :
第一列輸入一個正整數n ( n ≤ 6 ) 。其後有n列,每一列代表每個人,每一列之資料依序為人名、禮物名。請注意人名與禮物名為英文字母。
輸出說明 :
第一列顯示出可以有k種資料,其後顯示k組解列,其資料按照原本人名輸入的順序排列,即人名和禮物名視為同一組,一列中會有很多組,組與組間用逗號區分,用人名與禮物名用空白分隔。
範例 :

Sample Input:Sample Output:
3
A1 GIFT1
B1 GIFT2
C1 GIFT3
2
A1 GIFT2,B1 GIFT3,C1 GIFT1
A1 GIFT3,B1 GIFT1,C1 GIFT2

while True:
    try:
        def rot(data, n):           # 將第n個搬到最後
            val = data.pop(n)
            data.append(val)
            return data

        def rot_n_chk(data, n):     # 檢查第n個要不要搬
            for i in range(n-1):
                if data[i] == i:
                    rot(data, i+1)
                else:
                    break
            return data

        def chk_stop(data, n):      # 檢查所有的位置是否都歸位
            res = 1
            for i in range(n):      # 只要第i位置對 chk=1, 位置不對 chk=0
                chk=1 if data[i] == i else 0
                res *= chk          # 每位的乘積
            return res              # res乘積為1表示全歸位都輪完了
        
        n = int(input())
        Name, Gift, r = [], [], []
        for i in range(n):
            name, gift = map(str,input().split())
            Name.append(name)
            Gift.append(gift)
        
        data = [i for i in range(n)] # 預備產生個種排列 [0, 1, 2]
        while True:
            rot(data, 0)
            rot_n_chk(data, n)
            b = data[:]
            chr = 0 # 當有新排列時,檢查篩選出不在自已位置上的排列例如[1, 2, 0] 
            for i in range(n):
                if b[i] != i:chr += 1 # 位置不在位置上就 +1
            if chr == n:r.append(b) # chr = 排列的長度表示各個位置都錯開了再加入結果 r[]
            if chk_stop(data, n):break
        x = sorted(r)
        print(len(x))
        for i in range(len(x)):
            ws = ''
            for j in range(len(Name)):
                ws += Name[j] + ' '+Gift[x[i][j]]+','
            print(ws.rstrip(','))    
    except(EOFError):
        break

找出 n 個數所有排列

參考資料:海洋大學 丁培毅教授,旋轉法列出所有排列。
依教授的想法改用 python 的方法做出一樣的效果

n 個整數有 n! 種排列方式:
n = 3, n! = 3 * 2 = 6
六種排列如下:
            0 1 2
            0 2 1
            1 0 2
            1 2 0
            2 0 1
            2 1 0


以下我們來看一個特別的 "旋轉法" 的範例:
考慮 n = 4, n! = 24。
所有的 24 種排列,以及每一個動作詳細的說明如下:
設有一串列 data =[0, 1, 2, 3] 其元素值有以下的排列

0 1 2 3     ← 起始狀態,將 data[0] 移到最後產生下一個
1 2 3 0     ← 再將 data[0]移到最後產生下一個
2 3 0 1     ← 再將 data[0]移到最後產生下一個
3 0 1 2     ← 再將 data[0]移到最後產生下一個
0 1 2 3     ← 此時 0 回到原來的位置
                     將 data[1] 移到最後產生新的排列
0 2 3 1     ← 再將 data[0]移到最後產生下一個
2 3 1 0     ← 再將 data[0]移到最後產生下一個
3 1 0 2     ← 再將 data[0]移到最後產生下一個
1 0 2 3     ← 再將 data[0]移到最後產生下一個
0 2 3 1     ← 此時 0 回到原來的位置
                     將 data[1] 移到最後產生新的排列
0 3 1 2     ← 再將 data[0]移到最後產生下一個
3 1 2 0     ← 再將 data[0]移到最後產生下一個
1 2 0 3     ← 再將 data[0]移到最後產生下一個
2 0 3 1     ← 再將 data[0]移到最後產生下一個
0 3 1 2     ← 此時 0 回到原來的位置
                     將 data[1] 移到最後產生新的排列
0 1 2 3     ← 此時 1 也回到原來的位置
                     將 data[2] 移到最後產生新的排列
0 1 3 2     ← 再將 data[0]移到最後產生下一個
1 3 2 0     ← 再將 data[0]移到最後產生下一個
3 2 0 1     ← 再將 data[0]移到最後產生下一個
2 0 1 3     ← 再將 data[0]移到最後產生下一個
0 1 3 2     ← 此時 0 回到原來的位置
                     將 data[1] 移到最後產生新的排列
0 3 2 1     ← 再將 data[0]移到最後產生下一個
3 2 1 0     ← 再將 data[0]移到最後產生下一個
2 1 0 3     ← 再將 data[0]移到最後產生下一個
1 0 3 2     ← 再將 data[0]移到最後產生下一個
0 3 2 1     ← 此時 0 回到原來的位置
                     將 data[1] 移到最後產生新的排列
0 2 1 3     ← 再將 data[0]移到最後產生下一個
2 1 3 0     ← 再將 data[0]移到最後產生下一個
1 3 0 2     ← 再將 data[0]移到最後產生下一個
3 0 2 1     ← 再將 data[0]移到最後產生下一個
0 2 1 3     ← 此時 0 回到原來的位置
                     將 data[1] 移到最後產生新的排列
0 1 3 2     ← 此時 1 也回到原來的位置
                     將 data[2] 移到最後產生新的排列
0 1 2 3     ← 此時 2 也回到原來的位置
                     將 data[3] 移到最後產生新的排列
0 1 2 3     ← 此時 3 也回到原來的位置,全部都歸位結束輪替

def rot(data, n):               # 將第n個搬到最後
    val = data.pop(n)
    data.append(val)
    return data

def rot_n_chk(data, n):         # 檢查第n個要不要搬
    for i in range(n-1):
        if data[i] == i:
            rot(data, i+1)
        else:
            break
    return data

def chk_stop(data, n):          # 檢查所有的位置是否都歸位
    res = 1
    for i in range(n):          # 只要第i位置對 chk=1, 位置不對 chk=0
        chk=1 if data[i] == i else 0
        res *= chk              # 每位的乘積
    return res                  # res乘積為1表示全歸位都輪完了

odata = [0, 1, 2, 3]
n = len(odata)
r= []
while True:
    rot(odata, 0)
    rot_n_chk(odata, n)
    #print(num, odata)
    b = odata[:]
    r.append(b)
    if chk_stop(odata, n):break
print(sorted(r))
  

[C_MM243-易] 找出眾數

[C_MM243-易] 找出眾數

成績: 0 / 倒扣: 0.8
Problem Description
找出一串數列 ( 數字與數字間以空格區隔 ) 中出現最多次的數字。
例如: 1 2 2 3 5 6 1 2
則數字 2 出現最多次,共 3 次
Input Format
5 6 5 5 5 5 5 9 9
Output Format
5 6
第一個代表哪一個數字,第二個代表次數
Example
Sample InputSample Output
5 6 5 5 5 5 5 9 95 6

  
while True:
    try:
        nums = list(map(int,input().split()))
        data = {}
        for i in range(len(nums)):
            if nums[i] in data.keys():continue
            data.update({nums[i]:nums.count(nums[i])})
            #print(data)
        for key,value in data.items():
            if value == max(data.values()):
                print('%d %d' % (key,value))
    except(EOFError):
        break

2020年4月23日 星期四

[C_MM241-易] 平均值與標準差

[C_MM241-易] 平均值與標準差

成績: 0 / 倒扣: 0.8
問題描述
寫一個程式輸入一組數字,然後計算這組數字的平均值與標準差。假設輸入之數值為: x1, x2, …, xN (皆為整數),則平均值( µ )與標準差( s)計算公式為:
 C_MM241-1.JPG
輸入說明
輸入一組至多 20 個整數的數字,相鄰兩個整數以單一空白區隔。
輸出說明
輸出平均值 µ 與標準差 s ,第一行輸出: Mean = µ ,第二行輸出: Deviation = s 。等號前後各留一個空白。 µ 與 s 取小數點後兩位。
範例
Sample Input:Sample Output:
10 15 20 24 18
20 40 15 24 18 30

Mean = 17.40
Deviation = 4.72
Mean = 24.50
Deviation = 8.40

while True:  
    try:  
        num = list(map(int,input().split()))  
        u = round(sum(num) / len(num),2)  
        s = 0  
        for i in range(len(num)):  
            s= s + ((num[i] - u )**2 / len(num))  
        print('Mean = %.2f' % round(u,2))  
        print('Deviation = %.2f' % round(s**0.5,2))  
    except(EOFError):  
        break

2020年4月22日 星期三

[C_MM239-中] 找除數

[C_MM239-中] 找除數

成績: 0 / 倒扣: 0.8
問題描述
一個數的除數表示小於等於這個數又能整除這個數的數字,例如 8 的所有除數為: 1, 2, 4, 8 。寫一個程式給定一個數字範圍,找出在這個範圍內哪個數字的除數最多。由於數字會很大,範圍也不小,你的程式必須很有效率。
輸入說明
輸入一個數字範圍 L 至 U ,中間以單一空白區隔。 L 與 U 均為正整數,且滿足 1 <= L <= U <= 1000000000 , 0 <= U-L <= 10000 。
輸出說明
找出 L 至 U 之間,包含 L 與 U ,除數最多的數字。如果存在多個除數最多的數字,則以最小的那個數字表示。例如結果為 P ,除數共 N 個,則輸出格式為: P has a maximum of N divisors 。
範例
Sample Input:Sample Output:
1 10
999999900 1000000000
6 has a maximum of 4 divisors
999999924 has a maximum of 192 divisors


    填上程式碼
  

2020年4月21日 星期二

[C_MM237-中] 多項式的微分

[C_MM237-中] 多項式的微分

成績: 0 / 倒扣: 0.8
問題描述
一個多項式可以用下列通式表示:
f(x) = Cnxn + Cn-1xn-1 + . . . + C1x1 + C0x0
其中 Cn 表示 x 的 n 次項係數, Cn 為包含零的任意正負整數,而 n 為包含零的任意正整數。而 f(x) 的微分可表示成:
f ¢ (x)=nCnxn-1 + (n-1)Cn-1xn-2 + . . . + C1
請寫一個程式輸入一個多項式,然後輸出這個多項式的微分方程式。多項式輸入方式為指定所有非零係數項的係數數值與該次項的冪次方,冪次方由大至小依序指定。相鄰數字請用單一空格區隔。例如多項式 f(x) = 2x4 + 10x2 – 5x1 – 10x0 的輸入方式為: 2 4 10 2 -5 1 -10 0 。這個多項式的微分方程式輸出格式為:
8x^3+20x^1–5
每一項包含係數(含正負符號)、變數 x 、符號 ^ (表示次方)以及冪次方,請避免一個數字前面同時出現正負符號。項與項之間不必留空格。
輸入說明
輸入一個多項式所有非零係數項的係數數值(任意不為零的正負整數)與該次項的冪次方( 0 或任意正整數)。
輸出說明
輸出多項式的微分方程式。
範例
Sample Input:Sample Output:
1 4 -2 3 -5 0
-2 5 6 2 -10 1
4x^3-6x^2
-10x^4+12x^1-10

while True:  
    try:  
        m = list(map(int,input().split()))  
        r = []  
        for i in range(len(m)//2):  
            if m[2*i + 1]*m[2*i] == 0:  
                break  
            else:  
                r.append(m[2*i + 1]*m[2*i])  
                r.append(m[2*i + 1] - 1)  
        #print(r)  
        rs = ''  
        for i in range(len(r)//2):  
            if r[2*i + 1] == 0:  
                strs = '+' + str(r[2*i]) if r[2*i] > 0 else str(r[2*i])  
            else:  
                if i == 0:  
                    strs = str(r[2*i]) +'x^' + str(r[2*i + 1])  
                else:  
                    if r[2*i] > 0:  
                        strs = '+' + str(r[2*i]) + 'x^' + str(r[2*i + 1])  
                    else:  
                        strs = str(r[2*i]) + 'x^' + str(r[2*i + 1])  
            rs += strs  
        print(rs)  
    except(EOFError):  
        break

2020年4月20日 星期一

[C_MM236-中] 多項式的運算

[C_MM236-中] 多項式的運算

成績: 0 / 倒扣: 0.8
問題描述
一個多項式可以用下列通式表示:
f(x) = Cnxn + Cn-1xn-1 + . . . + C1x1 + C0x0
其中 Cn 表示 x 的 n 次項係數, Cn 為包含零的任意正負整數,而 n 為包含零的任意正整數。請寫一個程式輸入一個多項式,輸出代入某個 x 的數值,求得多項式的運算結果。多項式輸入方式為指定所有非零係數項的係數數值與該次項的冪次方,冪次方由大至小依序指定。相鄰數字請用單一空格區隔。例如多項式 f(x) = 2x4 + 10x2 – 5x1 – 10x0 的輸入方式為: 2 4 10 2 -5 1 -10 0 。則代入數值 1 ,多項式的運算結果為 -3 。
輸入說明
第一行輸入一個多項式所有非零係數項的係數數值(任意不為零的正負整數)與該次項的冪次方( 0 或任意正整數,最大值為 10 ),第二行輸入代入此多項式的數值(任意正負整數)。
輸出說明
求得代入給定數值後多項式的運算結果。
範例
Sample Input:Sample Output:
2 4 10 2 -5 1 -10 0
2
1 3 -1 0
3
52
26

while True:  
    try:  
        m = list(map(int,input().split()))  
        x = int(input())  
        result = 0  
        for i in range(len(m)//2):  
            result += (m[2*i])*(x**m[2*i + 1])  
        print(result)  
    except(EOFError):  
        break

2020年4月19日 星期日

[C_MM235-中] 三點求圓

[C_MM235-中] 三點求圓

成績: 0 / 倒扣: 0.8
問題描述
在平面二維座標中給定不在同一直線上的三點,可求得通過這三點的唯一圓。如下圖所示,給定 A, B, C 三點座標( x 軸與 y 軸),可利用 AB, BC 與 AC 線段,利用中垂線的交會點求得圓形的中心座標( rx 與 ry )。若這個圓的半徑為 r ,則這個圓可利用方程式: (x - rx)2 + (y - ry)2= r2 表示。請寫一個程式,要求輸入三點不在一直線的座標,求得通過此三點的圓其中心座標與半徑。
C_MM235.JPG
輸入說明
要求輸入一行數字包含三個點的 x 與 y 軸的座標,共 6 個數字。每個數字可以為 0 或任何正負整數,數字間以單一空格分開。
輸出說明
於輸入數字的下一行輸出圓的中心點 x 軸與 y 軸座標,以及圓的半徑。每個輸出的數字以小數點取後三位數的方式呈現,並以單一空格與後方數字分隔。

範例
Sample Input:Sample Output:
7 -5 -1 1 0 -6
3.000 -2.000 5.000
1 7 8 6 7 -2
3.921 2.447 5.409

填上程式碼

[C_MM234-易] 找尋雙胞胎質數

[C_MM234-易] 找尋雙胞胎質數

成績: 0 / 倒扣: 0.8
找尋雙胞胎質數
Problem Description所謂的雙胞胎質數,指的是相差為 2 的質數。例如 (17,19) 就是一對雙胞胎質數。請你寫一隻程式,找出某個區間 [a,b] 中的雙胞胎質數對。例如 [a,b] = [20, 100] ,則雙胞胎質數對有:
(29,31)
(41,43)
(59,61)
(71,73)
Input File Format輸入只有一行,這一行中包含了 2 個整數 a 及 b ,這兩個整數以逗號隔開。整數 a 為區間的下限。整數 b 為區間的上限,兩個整數間沒有空白且 1<=a,b<=1000000 。
Output Format輸出 [a,b] 區間中所有的雙胞胎質數對。每一行一個質數對,質數對用小括號括起來(見底下的範例),兩個質數間用逗點分隔,且中間不需要包含空白。
Example
Sample Input:Sample Output:
20,100


(29,31)
(41,43)
(59,61)
(71,73)

while True:  
    try:  
        def is_prime(n):  
            i, max =2, n**0.5  
            while True:  
                if n==1:return False; break  
                if n==2:return True; break  
  
                if n % i ==0:return False; break  
                if i > max:return True; break  
                i += 1  
  
        m, n = map(int,input().split(','))  
        primes = []  
        for i in range(m, n):  
            if is_prime(i):  
                primes.append(i)  
        for i in range(len(primes) - 1):  
            if abs(primes[i] - primes[i+1]) == 2:  
                print('(%d,%d)' % (primes[i],primes[i+1]))  
    except(EOFError):  
        break

2020年4月18日 星期六

[C_MM233-易] 計算複利

[C_MM233-易] 計算複利

成績: 0 / 倒扣: 0.8
計算複利
Problem Description你每個月存 10000 元到銀行中,銀行的每月利率為 0.1% ,以複利計算,請問 3 個月後,你的帳戶為多少錢?
底下的表格示範了如何得到第 3 個月時,帳戶中的本利和(本金 + 利率總合)。
月份月初金額月底本利和備註
第一個月1000010010月初存入 10000 元。
利息為 10000 * 0.1% = 10
所以本利和為 10010
第二個月2001020030.01第二個月再存入 10000
加上前一個月的 10010
所以月初有 20010 元
第三個月30030.0130060.04001所以第 3 個月時,本利和為 30060.04001 元。
我們定義底下幾個符號:
r: 每期利率。以前例而言, r = 0.1%
n: 期數。以前例而言, n = 3
p: 每期投入金額。以前例而言 p = 10000
現在,給你前述的三個值(即 r, n 及 p ),請計算期末的本利和。以前例而言,期未的本利合為 30060.04001 元。
Input File Format輸入有 3 行。第一行為 r ,為浮點數值。第二行為 n ,為一整數。第三行為 p ,為一整數。
Output Format輸出本利和,請將數值以「整數」表示(無條件捨去)
Example
Sample Input:Sample Output:
0.001
3
10000
30060

while True:
    try:
        r = float(input())
        n = int(input())
        p = int(input())
        temp = p
        for i in range(n):
            m = temp*(1 + r)
            temp = p + m
        print(int(m))
    except(EOFError):
        break

[C_MM232-易] 判斷日期是否正確

[C_MM232-易] 判斷日期是否正確

成績: 0 / 倒扣: 0.8
判斷日期是否正確
Problem Description給定一個日期(以 yyyy-MM-dd 的格式來表示),請寫一支程式判斷這個日期是否正確。舉例而言:
2012-02-29 :正確
2011-02-29 :不正確,因為 2011 年的 2 月只有 28 天
-1111-02-29 :不正確,因為年不可能為負數
2011-13-29 :不正確,因為月份不可能超過 12
2011-01-32 :不正確,因為 1 月不會有 32 天
Input File Format輸入的第一行為一個整數 n ,代表底下測資的個數( n<=10 )。
之後有 n 行字串。每一行字串為一日期,日期以 yyyy-MM-dd 的格式表示。
Output Format輸出每一個測資是否為正確的日期,若為正確的日期,請輸出 true ,否則請輸出 false (均小寫)
Example
Sample Input:Sample Output:
5
2012-02-29
2011-02-29
-1111-02-29
2011-13-29
2011-01-32

while True:
    try:
        month_day = [29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        def Runnian(y):
            return True if y % 400 == 0 or(y % 4 == 0 and y % 100 !=0) else False
        N = int(input())
        for i in range(N):
            data = list(map(str,input().split('-')))

            if len(data) > 3: # 
                print('false')
            else:
                if int(data[1]) > 12: # 檢查月份
                    print('false')
                else:
                    if Runnian(int(data[0])): # 檢查天數 如果是閏年
                        if int(data[1]) ==2 and int(data[2]) <= month_day[0]:
                            print('true')
                        elif int(data[2]) <= month_day[int(data[1])]:
                            print('true')
                        else:
                            print('false')
                    else:
                        print('true') if int(data[2]) <= month_day[int(data[1])] else print('false')
    except(EOFError):
        break

2020年4月17日 星期五

[C_MM230-中] 螺旋矩陣對角線值

[C_MM230-中] 螺旋矩陣對角線值

成績: 0 / 倒扣: 0.8
螺旋矩陣對角線值
問題描述
底下是一個 5*5 的螺旋矩陣。我們將對角線上的數值用紅色標出來。可以知道對角線的值相加後為 101 ( i.e., 1+3+5+7+9+13+17+21+25 = 101 )。
2122232425
2078910
1961211
1854312
1716151413
現在,給你一個 k*k 的螺旋矩陣( k 為奇數),請計算出其對角線值的加總。
註:本題取自 Project Euler , Problem 28 ( http://projecteuler.net/problem=28) 。
輸入說明
輸入一個 k 值, k 必為奇數。 k<=2001
輸出說明
計算 k*k 螺旋矩陣的對角線值總合,並輸出。
範例
Sample Input:Sample Output:
5101

while True:
    try:
        N = int(input())
        n, j ,sum = 1, 2, 1
        while True:
            if n >= N**2:break
            for i in range(4):
                n += j
                sum += n
            j+=2
        print(sum)
    except(EOFError):
        break