本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
解题思路:
按照符号总数计算单边打印行数,从中心一个符号开始,1,3,5,7...用a表示每行字符个数,a*2为沙漏对应行总数,a*2+1与总数比较,得出的最大的a最为单边最大行数,之后进行打印。
解题代码:
package P1027;
import java.util.Scanner;
public class shalou {
public static void main(String[] args) {
int n,a,b,c;
String s;
Scanner scan=new Scanner(System.in);
n=scan.nextInt();//输入符号总数
s=scan.next();//输入符号
int sum=1;
a=1;
while(sum<=n){//获取打印行数
a=a+2;
sum=sum+a*2;
}
b=a-2;
//开始打印
for(int i=b;i>0;i=i-2){
for (int j=i;j<b;j=j+2){
System.out.print(" ");
}
for (int j=i;j>0;j--){
System.out.print(s);
}
System.out.println();
}
for(int i=3;i<=b;i=i+2){
for (int j=i;j<b;j=j+2){
System.out.print(" ");
}
for (int j=i;j>0;j--){
System.out.print(s);
}
System.out.println();
}
System.out.println(n-(sum-a*2));//打印多余符号数
}
}