Python程式設計基礎題(22 N個數求和)

2021-10-19 10:02:26 字數 2915 閱讀 1368

description

本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子/分母的形式給出的,你輸出的和也必須是有理數的形式。

input

輸入第一行給出乙個正整數n(≤100)。隨後一行按格式a1/b1 a2/b2 …給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。

output

輸出上述數字和的最簡形式 —— 即將結果寫成整數部分 分數部分,其中分數部分寫成分子/分母,要求分子小於分母,且它們沒有公因子。如果結果的整數部分為0,則只輸出分數部分。

sample input1

5

2/5 4/15 1/30 -2/60 8/3

sample output1

3 1/3

sample input2

2

4/3 2/3

sample output2

sample input3

3

1/3 -1/6 1/8

sample output4

7/24

參考程式

from functools import

reduce

defdivide

(a,b)

: tag=

1if a<0:

tag=-1

a=-a numa,numb=

min(a,b)

,max

(a,b)

while numa%numb!=0:

c=numa%numb

numa=numb

numb=c

return

(a*tag//numb,b//numb)

defadd

(num1,num2)

: num1_up,num1_down=

list

(map

(int

,num1.split(

"/")))

num2_up,num2_down=

list

(map

(int

,num2.split(

"/")))

add_up=num1_up*num2_down+num1_down*num2_up

add_down=num1_down*num2_down

add_up,add_down=divide(add_up,add_down)

return

str(add_up)

+"/"

+str

(add_down)

defpart

(num)

: num_up,num_down=

list

(map

(int

,num.split(

"/")))

if num_up==0:

return

"0"else

: tag=

""if num_up<0:

tag=

"-" num_up=

-num_up

if num_up>=num_down:

int_part=num_up//num_down

num_up=num_up-num_down*int_part

if num_up==0:

return tag+

str(int_part)

else

: num_up,num_down=divide(num_up,num_down)

return tag+

str(int_part)

+" "

+tag+

str(num_up)

+"/"

+str

(num_down)

else

:return num

n=int

(input()

)ls=

input()

.split(

" ")

res=

reduce

(add,ls)

print

(part(res)

)

注:

本題為「pat 團體程式設計天梯賽-練習集 l1-009 n個數求和 (20 分)」技術難度上並不大,實現要點包括①兩個分數相加;②分子分母的約分(求出分子和分母的最大公約數);③部分分數(將假分數轉換為帶分數的形式)。

但是要考慮以下細節(平台的測試用例包含以下情況):

若計算結果為0,應直接輸出0,不寫成分數的形式;

若計算結果只有整數部分,則只輸出整數部分;

若計算結果為負數,則應在整數部分和分數部分前面都加上負號;

必須要進行化簡,而且求最大公約數的演算法效率要高(使用輾轉相除法,不能用2~min(a,b)遍曆法,否則會超時)。化成帶分數後,也要對分數部分再進行一次化簡。

給出以下幾個測試用例用於自行檢查程式:

輸入:2-

2/6-

1/6輸出:-1

/2輸入:2-1

/21/

2輸出:

0輸入:211

/159/

15輸出:11

/3輸入:2-6

/9-8

/9輸出:-1-

5/9

Python基礎程式設計題

1 接收輸入的一行字元,統計出字串中包含數字的個數 str input 請輸入一串字元 count 0for i in str if i.isdigit count count 1print 數字個數 d count 2 請輸入星期幾的第一 個字母,用來判斷是星期幾,如果第乙個字母一樣,則繼續判斷第...

測試面試 python基礎程式設計題

1.列表的去重 方法1 保持原列表的順序 l 1 2,2 4,8 7 l1 list set l 使用set 去重,無序 l2 sorted l1,key l.index 使用sorted的key關鍵字按列表l的索引值排序 或者使用list自帶的方法sort l1.sort key l.index ...

程式設計題 n個數里最小的k個

輸入描述 每個測試輸入包含空格分割的n 1個整數,最後乙個整數為k值,n 不超過100。輸出描述 輸出n個整數裡最小的k個數。公升序輸出示例1 3 9 6 8 10 7 11 19 30 12 23 5 11 10 3 6 7第一種方法,用容器 include include includeusin...