1027. 打印沙漏(20)

来源:互联网 发布:遗传算法的基本思想 编辑:程序博客网 时间:2024/05/16 02:59

1027. 打印沙漏(20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

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

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

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

输入格式:

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

输出格式:

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

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

import java.util.*;  public class Main {public static void main(String[] args) {       Scanner in=new Scanner(System.in);      while(in.hasNext()){       int n=in.nextInt();       char c=in.next().charAt(0);       int line =(int) Math.floor(Math.sqrt((n+1)*1.0/2));//计算半部分的行数       int cnt=0;//计数符号数目       //打印上半部分多一行       for (int i = line; i>=1; i--) {     for (int j = 0; j <line-i; j++) {  System.out.print(" ");       } for (int j = 0; j < 2*i-1; j++) {System.out.print(c);cnt++;  } System.out.println();    }            //打印下半部分少一行       for (int i =2; i<=line; i++) {     for (int j = 0; j <line-i; j++) {System.out.print(" ");  }   for (int j = 0; j < 2*i-1; j++) {  System.out.print(c);  cnt++;    }   System.out.println();      }          System.out.print(n-cnt);      }                  }}反思:先说一下我怎么计算行数的,1,3,5,。。。等差数列求和公式得到n²(n是此数列项数),则由题意知:总的个数为2n2-1,
求出n即可,然后依次打印空格和符号,这里我真是被自己蠢哭了,我竟然打印空格符号空格,后面的空格完全多余啊,QAQ

原创粉丝点击