我正在尝试绘制这颗钻石,以便在中间行之后,钻石的其余部分向右移动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;
}
答案 0 :(得分:5)
答案 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(" ");
我认为这足够简单。