使用星号创建沙漏[英] Creating an hourglass using asterisks

问题描述

我想使用"*"字符创建一个沙漏.例如,如果用户输入是 5,那么它看起来像这样:

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

和 3 看起来像这样:

 ***
  *
 ***

到目前为止我有:

public static void draw(int W){
    stars(W);
    if (W > 1) {
        draw(W-1);
        stars(W);
    }
}
public static void stars(int n){
    System.out.print("*");
    if(n>1) stars(n-1);
    else System.out.println();
}

它创造了

 *****
 ****
 ***
 **
 *
 **
 ***
 ****
<小时>

推荐答案

一个完整的Java解决方案

public static void draw(int w){
    draw(w, 0);
}

public static void draw(int W, int s){
    stars(W, s);
    if (W > 2) {
        draw(W-2, s+1);
        stars(W, s);
    }
}
public static void stars(int n, int s){
    if(s > 0){
        System.out.print(" ");
        stars(n, s-1);
    } else  if (n > 0){
        System.out.print("*");
        stars(n-1, s);
    } else {
        System.out.println();
    }
}

引入参数 s 是为了跟踪星号居中所需的空格数另一种方法是使用一些全局参数来跟踪总宽度并进行减法,但您似乎真的很喜欢递归.

这段代码

for(int i = 1; i < 7; i++){
    System.out.println("An hourglass of width " + i);
    draw(i);
    System.out.println();
}

现在会输出这个

An hourglass of width 1
*

An hourglass of width 2
**

An hourglass of width 3
***
 *
***

An hourglass of width 4
****
 **
****

An hourglass of width 5
*****
 ***
  *
 ***
*****

An hourglass of width 6
******
 ****
  **
 ****
******

本文地址:https://www.itbaoku.cn/post/978617.html