1027. 打印沙漏(PAT)

Posted centuries

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1027. 打印沙漏(PAT)相关的知识,希望对你有一定的参考价值。

题目要求:

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定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)的主要内容,如果未能解决你的问题,请参考以下文章

PAT 1027. 打印沙漏

1027. 打印沙漏(PAT)

PAT——1027. 打印沙漏

PAT-乙级-1027 打印沙漏

PAT 1027. 打印沙漏(20)

PAT乙级1027. 打印沙漏(20)