根据输入打印出最大的沙漏形状
import java.util.Scanner;
/**
* 打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数
* 例如:输入 19 *
* 输出:
* *****
* ***
* *
* ***
* *****
* 2
*/
public class Demo02 {
public static void main(String[] args) {
int num=0;
String str="*";
Scanner scanner=new Scanner(System.in);
System.out.println("请输入1个正整数N(≤1000)和一个符号:");
while(scanner.hasNextInt() && scanner.hasNext()){
num=scanner.nextInt();
str=scanner.next();
if(num>1000){
System.out.println("数值过大!");
}else if(str.length()>1){
System.out.println("请输入一个符号:");
}else{
print(num,str);//根据参数打印图案
}
System.out.println("请输入1个正整数N(≤1000)和一个符号:");
}
System.out.println("格式不正确,结束运行!");
scanner.close();
}
public static void print(int num,String str){
int last=0;//剩余的图案数
//计算某一行最大图案数
int sum=1;//需要的图案最大总数
int max=1;//某一行上的最大图案数
while(sum<=num){
max+=2;//每行隔2个
//判断剩余图案数目是否足够下一行需要的图案数
if(num-sum>=max*2){
sum+=(max*2);
}else{
max-=2;
break;
}
}
last=num-sum;
//打印图案
int space=0;//某一行需要的空格数量
for (int i = max; i>1; i-=2) {
space=(max-i)/2;
for (int j = 0; j < space; j++) {
System.out.print(" ");
}
for (int j = 0; j < i; j++) {
System.out.print(str);
}
for (int j = 0; j < space; j++) {
System.out.print(" ");
}
System.out.println();
}
for (int i =1; i<=max; i+=2) {
space=(max-i)/2;
for (int j = 0; j < space; j++) {
System.out.print(" ");
}
for (int j = 0; j < i; j++) {
System.out.print(str);
}
for (int j = 0; j < space; j++) {
System.out.print(" ");
}
System.out.println();
}
if(last>0){
System.out.println(last);
}
}
}
结果:
