description
本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子/分母的形式給出的,你輸出的和也必須是有理數的形式。
input
輸入第一行給出乙個正整數n(≤100)。隨後一行按格式a1/b1 a2/b2 …給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。
output
輸出上述數字和的最簡形式 —— 即將結果寫成整數部分 分數部分,其中分數部分寫成分子/分母,要求分子小於分母,且它們沒有公因子。如果結果的整數部分為0,則只輸出分數部分。
sample input1
5sample output12/5 4/15 1/30 -2/60 8/3
3 1/3sample input2
2sample output2 sample input34/3 2/3
3sample output41/3 -1/6 1/8
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...