天梯赛L1_002打印沙漏

L1-002 打印沙漏(20 分)

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2

代码:

import java.util.Scanner;

public class L1_002 {
	public static void main(String args[]) {
    int sum=1,a=1,i,q,t,k,j,g;
    Scanner std=new Scanner(System.in);
    int N=std.nextInt();
    String c=std.next();
    //正打印沙漏上半部分
    for(i=1;sum<=N;i++){   
    	a=a+2;//3+5+... 
    	sum=sum+a*2;}
        i=i-1;
        q=i;
        sum=sum-2*a;
         k=0; 
        for(j=i;j>=1;j--){
    	   for(g=1;g<=k;g++)
    		    System.out.printf(" ");
    	   for(t=1;t<=2*j-1;t++)
    		   System.out.printf(c);
    	       System.out.printf("\n");
    	       k++;
    }
   //打印沙漏下半部分
   k=k-2;
    for(j=2;j<=q;j++){
    	for(g=1;g<=k;g++)
    		System.out.printf(" ");
    	for(t=1;t<=2*j-1;t++)
    		System.out.printf(c);
    	System.out.printf("\n");
    	k--;}
    //输出没用掉的符号数
    System.out.println((N-sum));
 

	}
}

猜你喜欢

转载自blog.csdn.net/wang_s_a/article/details/81167422