本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//给定17个*能打印多少行
Scanner scanner=new Scanner(System.in);
String s = scanner.nextLine();
String[] s1=s.split(" ");
int stars=Integer.parseInt(s1[0]);
char c=s1[1].charAt(0);
int line=0;
int i=1;
for(i=1;i<=51;i++){//找出最多能够打印的行数
if(i%2!=0){
if(reversion(i)>stars){
break;
}
}
}
line=i-2;//最终能够打印的行数
stars-=reversion(line);
//打印line行第一行为line
int star=line;
int blank=0;
for(int j=0;j<line;j++){//打印的行数
for(int m=1;m<=blank;m++){//要打印的空格数
System.out.print(" ");
}
for (int k=1;k<=star;k++){//要打印的星数
System.out.print(c);
}
if(j<(line/2)) {
star = star - 2;
blank = blank + 1;
}else{
star = star + 2;
blank = blank - 1;
}
System.out.println();
}
System.out.println(stars);
}
public static int reversion(int n){//打印奇数行对应的个数
if(n<1)return 0;
if(n==1)return 1;
return reversion(n-2)+2*n;
}
}
提交结果: