gpt4 book ai didi

c - 用最少的循环优化 c 中的空心菱形图案打印

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:13 24 4
gpt4 key购买 nike

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

'

最佳答案

通过计算 (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,这在这里很好,而且可能更快)

关于c - 用最少的循环优化 c 中的空心菱形图案打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com