PTA系統自測題-打印沙漏 (python 3)


題目要求:

自測-1 打印沙漏   (20分)

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。
輸入格式:

輸入在一行給出1個正整數N(≤\le≤1000)和一個符號,中間以空格分隔。
輸出格式:

首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:

19 *

輸出樣例:

*****
 ***
  *
 ***
*****
2


分析:

本題解決思路很多,這裏提供一種比較直接的想法,將拿到的N拆分成可能的每一行所需打印的符號數目構成的list,餘下來的自然就是不需要的符號

例如 19= [5,3,1,3,5] +2 ,之後按list中顯示的各行對應的符號數依次打印出來即可

主要談一談,要通過PTA測試的注意事項,題主因爲這兩個坑爹原因提交了好久沒通過,百思不得其解。。。

1. 打印出的沙漏形狀,右側千萬不能出現多於的空格,在行尾請回車

2. 在調用python3 的input函數時,不能在屏幕上打印input的說明,否則也會被PTA判斷成不通過。換句話說,input("") 可以通過測試,但是input("Please enter an integer")就會帶來誤判


代碼如下:

#!/usr/bin/python
import sys

InputInfo = input ("")
InputList = InputInfo.split(' ', 1)
N = int(InputList[0])
Symbol = InputList[1]
container = N
if type(N) != type (1) or N <= 0 :
    print("Something goes wrong, you didn't input a positive integer")
    sys.exit()

count = 1
starnum_eachrow = [ 1 ] 
container -= 1
rest_star = 0
while container > 0 :
    count += 1
    need_star_num= 2*count - 1  
    if container >= 2 * need_star_num :
        container -= need_star_num*2
        starnum_eachrow.append(need_star_num)
        starnum_eachrow.insert(0, need_star_num)
    else:
        rest_star = container
        container = 0 

row_len = starnum_eachrow[0]
for starnum_thisrow in starnum_eachrow :
    blank_space = int( ( row_len - starnum_thisrow )/2 )
    this_row_print = " " *blank_space + Symbol * int( starnum_thisrow )
    print (this_row_print)

print (rest_star, end = '' )    #To delete the automatic end \n        




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章