2016年9月10日 星期六

python 程式設計50題測試範例-45


45、一群士兵分編成如圖所示若干大隊,每一大隊又分成若干小隊,其中123
   4567表大隊,spdf等表小隊,s小隊最多可編入2人,p小隊6人,d
   小隊10人,f小隊14人,編隊方式則從1s小隊開始,按箭頭方向所示,前一小隊
   編滿額後還有人未編隊時則編入後一小隊,至全部編完為止。
      作一程式輸入士兵人數NN<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
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...