尝试打印带有最小环的*轮廓的空心菱形图案。我优化了2个循环。
我的输出使用2个循环
Enter no of rows: 5
***********
***** *****
**** ****
*** ***
** **
* *
** **
*** ***
**** ****
***** *****
***********
还有其他方法可以优化此代码吗?
void main()
{
int row,col,n,k;
printf("Enter no of rows: ");
scanf("%d",&n);
for(row=0, k=1; row<=2*n; row>n?k++:k, printf("\n"), row++)
for(col=-n; col<=n; col++)
(col>0?col:-col) < (row<=n?row:(row-2*k)) ? printf(" ") : printf("*");
}
答案 0 :(得分:1)
(row<=n?row:(row-2*k))
不依赖于内循环变量,你可以节省大量时间
所以写下:
int row,col,n,k;
printf("Enter no of rows: ");
scanf("%d",&n);
for(row=0, k=1; row<=2*n; row>n?k++:k, putchar('\n'), row++)
{
int z=(row<=n?row:(row-2*k));
for(col=-n; col<=n; col++)
putchar((col>0?col:-col) < z ? ' ' : '*');
}
是等价的,但你的测试要少得多(注意在printf中使用三元表达式而不是2个printfs的更好方法)。
(也被printf
替换为膨胀的putchar
,这里很好,而且可能更快)