1027. 打印沙漏(PAT)
阿新 • • 發佈:2018-04-01
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 publicclass 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)