c中的恒星钻石

时间:2013-02-19 21:45:47

标签: c

我正在尝试绘制这颗钻石,以便在中间行之后,钻石的其余部分向右移动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;
 }

3 个答案:

答案 0 :(得分:5)

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

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

请参阅fiddle

答案 1 :(得分:1)

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

int flag = 0;

    ....


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

    numstars+=rate;

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

}

答案 2 :(得分:0)

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

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

我认为这足够简单。