在c中优化空心菱形图案印刷,使环路最小化

时间:2016-10-23 08:04:52

标签: c performance loops design-patterns

尝试打印带有最小环的*轮廓的空心菱形图案。我优化了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("*");
}

1 个答案:

答案 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,这里很好,而且可能更快)