-1

我试图画出这颗钻石,以便在中间行之后,钻石的其余部分向右移动 3 个空格,就好像你正在通过一杯水看它一样。你能以某种方式修改下面的代码来合并这种转变吗?

输出应该类似于:

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

(但中间最多有 15 颗星)。
谢谢!

define TOTAL_ROWS 15
int main() {
    int row, col, numstars=1;
    int half, rate=1;

    for (row=1; row<=TOTAL_ROWS; row++) {

        half=TOTAL_ROWS/2

        for (col=0; col<half+1-numstars; col++)
            printf(" ");

        for (col=1; col<=2*numstars-1; col++)
            printf("*");

        if (numstars==(half+1))
            rate = -rate;

        numstars+=rate;  
        printf("\n");

    }
    return 0;
}
4

3 回答 3

5

只需检查行是否大于一半并添加这 3 个空格...

if(row>half+1)
    printf("    ");

小提琴

于 2013-02-19T21:53:28.223 回答
1

当您切换到另一半时,设置一个标志并在此后打印 3 个空格。

int flag = 0;

    ....


  if (numstars==(half+1)) {
        rate = -rate;
        flag = 1;
    }

    numstars+=rate;

    printf("\n");
    if (flag) printf("   ");

}

于 2013-02-19T21:52:22.483 回答
0

在第一个内部 for 中,如果变量超过中心,您可以启动col变量:-3

for (col=(row <= half+1 ? 0 : -3); col<half+1-numstars; col++)
    printf(" ");

我认为这已经足够且容易了。

于 2013-02-19T22:09:55.637 回答