Go語言小白入門刷題打印輸出沙漏
題解
【PTA團體程序設計天梯賽】 L1-002 打印沙漏 (20 分) Go語言|Golang
本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印
*****
***
*
***
*****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
結尾無空行
輸出樣例:
*****
***
*
***
*****
2
結尾無空行
思路
基礎的輸出,如果覺得這題不友好的可以跳過,等回頭再來做做,領悟一下。
就是找規律,先計算出所需要的有多少。再減去然後得到剩餘的數量。然後再按照規律打印這個沙漏,其實就是一個等差數列瞭啦~
代碼如下
package main import ( "fmt" ) func main() { var n int var tag byte var sum, nextSum int _, _ = fmt.Scanf("%d %c", &n, &tag) sum = 1 nextSum = 1 i := 1 last := 0 for true { // 先是計算出所需要多少的符號 i += 2 nextSum += i * 2 if nextSum <= n { sum += i * 2 } else { i -= 2 last = n - sum break } } for j:=i; j>=1; j=j-2 { // 先打印上半部分 var space = (i - j) / 2 for k:=0; k<i-space; k++ { if k < space { fmt.Printf(" ") // 先打印空格 } else { fmt.Printf("%c", tag) //再打印* } } fmt.Println() // 最後記得要換行 } for j:=3; j<=i; j=j+2 { var space = (i - j) / 2 //再打印下半部分 for k:=0; k<i-space; k++ { if k < space{ fmt.Printf(" ") //再打印* } else { fmt.Printf("%c", tag) } } fmt.Println() } fmt.Println(last) }
以上就是Go語言小白入門刷題打印輸出沙漏的詳細內容,更多關於Go語言打印沙漏的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Go語言實現UDP協議及TCP通訊
- Golang通脈之數據類型詳情
- 基於golang uint8、int8與byte的區別說明
- Golang中for循環的用法示例詳解
- 一文帶你全面掌握Go語言中的正則表達式