1. 程式人生 > >1027. 打印沙漏(PAT)

1027. 打印沙漏(PAT)

gpo main pan 例如 port stat next() style ++

題目要求:

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

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

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

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

題目分析:每行的符號數相差2,因為1+3+5+......+(2*n-1) = n^2。因此,根據n我們可以確定沙漏的層數。

代碼如下:

 1 import java.util.Scanner;
 2 
 3 public
class Main { 4 public static void main(String[] args){ 5 Scanner in = new Scanner(System.in); 6 int n = in.nextInt(); 7 String s = in.next(); 8 int level = line(n); 9 int i,j,blank; 10 for(i=level;i>1;i--){ 11 j = 2*i - 1; 12 blank = level-i;
13 while(blank>0){ 14 System.out.print(" "); 15 blank--; 16 } 17 while(j>0){ 18 System.out.print(s); 19 j--; 20 } 21 System.out.println(); 22 } 23 blank = level-1;
24 while(blank>0){ 25 System.out.print(" "); 26 blank--; 27 } 28 System.out.println(s); 29 for(i=2;i<=level;i++){ 30 j = 2*i - 1; 31 blank = level - i; 32 while(blank>0){ 33 System.out.print(" "); 34 blank--; 35 } 36 37 while(j>0){ 38 System.out.print(s); 39 j--; 40 } 41 System.out.println(); 42 } 43 int rest = n + 1 - 2*level*level; 44 System.out.println(rest); 45 in.close(); 46 } 47 public static int line(int n){ 48 int i = 1; 49 while(2*i*i<=n+1) 50 i++; 51 return i-1; 52 } 53 }

1027. 打印沙漏(PAT)