00-自测1. 打印沙漏(20)

源网址

http://www.patest.cn/contests/mooc-ds2015spring/00-%E8%87%AA%E6%B5%8B1


本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

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

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:
19 *
输出样例:
*****
 ***
  *
 ***
*****
2

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 
 5 public class Main
 6 {
 7     static int n0;//原始个数
 8     static int n1;//剩余个数
 9     static int cout;//行数
10     static String ch;//打印的符号
11     public static void cout()
12     {
13         int i=2;
14         int sum=1;
15         for(;sum<=n0;i++)
16         {
17             sum+=2*(2*i-1);
18         }
19         i--;
20         sum=sum-2*(2*i-1);
21         n1=n0-sum;
22         i--;
23         i=2*i-1;
24         cout=i;
25     }
26     
27     public static void print()
28     {
29         int cout1=cout/2;//中心位置
30         for(int i=0;i<cout;i++)
31         {
32             if(i<cout1)
33             {
34                 for(int j=0;j<i;j++)
35                     System.out.print(" ");
36                 for(int j=i;j<2*(cout-i-1-cout/2)+1+i;j++)
37                     System.out.print(ch);
38                 System.out.println();
39             }
40             if(i==cout1)
41             {
42                 for(int j=0;j<i;j++)
43                     System.out.print(" ");
44                 System.out.print(ch);
45                 System.out.println();
46             }
47             if(i>cout1)
48             {
49                 for(int j=0;j<cout-i-1;j++)
50                     System.out.print(" ");
51                 for(int j=i;j<2*(i-cout/2)+1+i;j++)
52                     System.out.print(ch);
53                 System.out.println();
54             }
55         }
56         System.out.println(n1);
57     }
58     
59     public static void main(String[] args) throws IOException
60     {
61         BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
62         String temp;
63         temp=buf.readLine();
64         String[] temp1=temp.split(" ");
65         n0=Integer.parseInt(temp1[0]);
66         if(n0<1)
67             return;
68         ch=temp1[1];
69         cout();
70         print();
71 
72     }
73 }
原文地址:https://www.cnblogs.com/qq1029579233/p/4397246.html