题目要求:
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定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 }