【发布时间】:2017-05-17 10:04:01
【问题描述】:
我想得到以下输出:
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 10
运行的代码如下:
#include <stdio.h>
int main(void) {
int i=1,flag=0,lines=0; //0 for forward, 1 for reverse
while(i!=0 && lines<3){
if(!flag){
printf("%d ",i);
if(i==10){
flag=1;
printf("\n");
lines++;
}
else
i++;
}
else if(flag){
printf("%d ",i);
if(i==1){
lines++;
flag=0;
printf("\n");
}
else
i--;
}
}
return 0;
}
我从上述代码中获得了所需的输出,但不确定它是否是最佳代码。还有其他方法/建议吗?考虑到无限空间,但时间复杂度应保持最低。
条件:只使用一个循环
【问题讨论】:
-
你应该考虑发帖到codereview.stackexchange.com而不是代码审查问题
-
for( int i = 1; i <= 3; i ++ ) { if( i % 2 ) for( int j = 1; j <= 10; j++ ) printf( "%d ", j ); else for( int j = 10; j >= 1; j-- ) printf( "%d ", j ); printf("\n"); } -
我投票结束这个问题,因为它属于codereview.stackexchange.com
-
@taskinoor 仅仅因为一个问题在其他地方是热门话题,并不会使它在此处脱离话题。这已在 meta 上多次讨论过。代码审查确实是一个更适合发布此内容的网站,但这并不会使这个问题在 SO 上偏离主题。
-
在没有特定系统的情况下讨论性能毫无意义。特别是因为在这种情况下 99% 的执行时间将被 printf 函数调用阻塞。除非您将算法与 printf 调用分开,否则尝试优化此循环只不过是“未成熟的优化”。优化还包括尝试在编译时预先生成数字,完全摆脱循环。