45、一群士兵分編成如圖所示若干大隊,每一大隊又分成若干小隊,其中1、2、3、
4、5、6、7表大隊,s、p、d、f等表小隊,s小隊最多可編入2人,p小隊6人,d
小隊10人,f小隊14人,編隊方式則從1s小隊開始,按箭頭方向所示,前一小隊
編滿額後還有人未編隊時則編入後一小隊,至全部編完為止。
作一程式輸入士兵人數N,N<100,列印出每一大隊及各小隊編隊之人數。
例:輸入N=11,則輸出可以適當格式表示,1s小隊編2人,2s小隊2人,2p小隊
6人,3s小隊1人,第1大隊2人,第2大隊8人,第3大隊1人。
以下引N測試之:8,29,55,57,79,92。
1s
↓
2s→ 2p
↙
3s→ 3p 3d
↙ ↙
4s 4p
4d 4f
↙ ↙ ↙
5s 5p
5d 5f
↙ ↙ ↙
6s 6p
6d
↙ ↙
7s 7p
↙
8s
2
|
14
|
10
|
6
|
2
|
14
|
10
|
6
|
|||
1
|
1s
|
|
|
|
1
|
1s
|
|
|
|
|
2
|
2s
|
|
|
2p
|
2
|
2s
|
|
|
2p
|
|
3
|
3s
|
|
|
3p
|
3
|
3s
|
|
3d
|
3p
|
|
4
|
4s
|
|
3d
|
4p
|
4
|
4s
|
4f
|
4d
|
4p
|
|
5
|
5s
|
|
4d
|
5p
|
5
|
5s
|
5f
|
5d
|
5p
|
|
6
|
6s
|
4f
|
5d
|
6p
|
6
|
6s
|
|
6d
|
6p
|
|
7
|
7s
|
5f
|
6d
|
7p
|
7
|
7s
|
|
|
7p
|
|
8
|
8s
|
|
|
|
8
|
8s
|
|
|
|
|
範例一
|
範例二
|
輸入
|
8
|
29
|
輸出
|
1s小隊編2人,第一大隊2人
2s小隊編2人,第二大隊6人
2p小隊編4人
|
1s小隊編2人,第一大隊2人
2s小隊編2人,第二大隊8人
2p小隊編6人
3s小隊編2人
3p小隊編6人
3d小隊編9人,第三大隊17人
4s小隊編2人,第四大隊2人
|
程式:
#coding=utf8
print("45、一群士兵分編成如圖所示若干大隊,每一大隊又分成若干小隊,其中1、2、3、")
print(" 4、5、6、7表大隊,s、p、d、f等表小隊,s小隊最多可編入2人,p小隊6人,d")
print(" 小隊10人,f小隊14人,編隊方式則從1s小隊開始,按箭頭方向所示,前一小隊")
print(" 編滿額後還有人未編隊時則編入後一小隊,至全部編完為止。")
print(" 作一程式輸入士兵人數N,N<120,列印出每一大隊及各小隊編隊之人數。")
print("==========================================================================")
scores1 = [2,2,6,2,6,2,10,6,2,10,6,2,14,10,6,2,14,10,6,2,0] # add null 0
scores2 = ['1s','2s','2p','3s','3p','4s','3d','4p','5s','4d','5p'
,'6s','4f','5d','6p','7s','5f','6d','7p','8s','ss'] # add null ss
sort1 = [1,2,2,3,3,4,3,4,5,4,5,6,4,5,6,7,5,6,7,8] #
sort2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] #
sort3 = [0,0,0,0,0,0,0,0]
while True:
Q=int(input("請輸入士兵人數N < 120:"))
try:
Q = int(Q)
except ValueError:
print ('這是不合法的輸入. 請再輸入一次...')
continue
if ( Q > 0 and Q < 120):
break
#==================
k=Q
sum1=0
print(k,"===>分配 ")
for i in range (0,len(scores1)):
sum1=sum1+scores1[i]
x=k
k=k-scores1[i]
if (k >=0):
if (scores2[i]=='1s' or scores2[i]=='2s' or scores2[i]=='3s' or scores2[i]=='4s' or
scores2[i]=='5s' or scores2[i]=='6s' or scores2[i]=='7s' or scores2[i]=='8s'):
print()
print("(",scores2[i],"-",scores1[i],")",end=",")
sort2[i]=scores1[i]
else:
print("(",scores2[i],"-",scores1[i],")",end=",")
sort2[i]=scores1[i]
else:
if (scores2[i]=='1s' or scores2[i]=='2s' or scores2[i]=='3s' or scores2[i]=='4s' or
scores2[i]=='5s' or scores2[i]=='6s' or scores2[i]=='7s' or scores2[i]=='8s'):
print()
print("(",scores2[i],"-",x,")")
sort2[i]=x
break
else:
print("(",scores2[i],"-",x,")")
sort2[i]=x
break
print(sort2)
for i in range (0,len(sort2)):
j1=sort2[i]
j2=sort1[i]-1
sort3[j2]=j1+sort3[j2]
print(sort3)
for i in range(0,len(sort3)):
print("第",i+1,"大隊人數為",sort3[i])
#================================================
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-45.py =================
45、一群士兵分編成如圖所示若干大隊,每一大隊又分成若干小隊,其中1、2、3、
4、5、6、7表大隊,s、p、d、f等表小隊,s小隊最多可編入2人,p小隊6人,d
小隊10人,f小隊14人,編隊方式則從1s小隊開始,按箭頭方向所示,前一小隊
編滿額後還有人未編隊時則編入後一小隊,至全部編完為止。
作一程式輸入士兵人數N,N<120,列印出每一大隊及各小隊編隊之人數。
==========================================================================
請輸入士兵人數N < 120:29
29 ===>分配
( 1s - 2 ),
( 2s - 2 ),( 2p - 6 ),
( 3s - 2 ),( 3p - 6 ),
( 4s - 2 ),( 3d - 9 )
[2, 2, 6, 2, 6, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[2, 8, 17, 2, 0, 0, 0, 0]
第 1 大隊人數為 2
第 2 大隊人數為 8
第 3 大隊人數為 17
第 4 大隊人數為 2
第 5 大隊人數為 0
第 6 大隊人數為 0
第 7 大隊人數為 0
第 8 大隊人數為 0
>>>
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-45.py =================
45、一群士兵分編成如圖所示若干大隊,每一大隊又分成若干小隊,其中1、2、3、
4、5、6、7表大隊,s、p、d、f等表小隊,s小隊最多可編入2人,p小隊6人,d
小隊10人,f小隊14人,編隊方式則從1s小隊開始,按箭頭方向所示,前一小隊
編滿額後還有人未編隊時則編入後一小隊,至全部編完為止。
作一程式輸入士兵人數N,N<120,列印出每一大隊及各小隊編隊之人數。
==========================================================================
請輸入士兵人數N < 120:85
85 ===>分配
( 1s - 2 ),
( 2s - 2 ),( 2p - 6 ),
( 3s - 2 ),( 3p - 6 ),
( 4s - 2 ),( 3d - 10 ),( 4p - 6 ),
( 5s - 2 ),( 4d - 10 ),( 5p - 6 ),
( 6s - 2 ),( 4f - 14 ),( 5d - 10 ),( 6p - 5 )
[2, 2, 6, 2, 6, 2, 10, 6, 2, 10, 6, 2, 14, 10, 5, 0, 0, 0, 0, 0]
[2, 8, 18, 32, 18, 7, 0, 0]
第 1 大隊人數為 2
第 2 大隊人數為 8
第 3 大隊人數為 18
第 4 大隊人數為 32
第 5 大隊人數為 18
第 6 大隊人數為 7
第 7 大隊人數為 0
第 8 大隊人數為 0
>>>
沒有留言:
張貼留言