繁体   English   中英

优化代码以遵循 c 中的 output

[英]optimize code to get following output in c

我上周接受了采访。 他们让我写一个这样打印的代码

input :5
     0
    101
   21012
  3210123
 432101234
54321012345

我写了下面的代码,但他说我可以进一步优化。 我想不通。 ,

int main(){
  int n,i,j,k,lim,num;
  scanf("%d",&n);//getting input starting number of last row
  lim=n;
  int collen=n+2;//it denotes end of row 
  for(i=0;i<n+1;i++)
  {
    num=i;
    k=0;
    for(j=0;j<collen-1;j++){
      if(j<lim)
        printf(" ");
      else if(num<0){

        printf("%d",++k);
      }
      else{
        printf("%d",num--);

      }
   }//j for
   printf("\n");
   collen++;
   lim--;
  }//i for
}// main end

我第一次尝试有不同的代码,我使用标志来检测 num 何时达到递增和递减,这很复杂,如果在第二个循环内大约有 4 个,所以我将该代码优化为上述代码。 他说你能优化更多吗? 我不知道优化它。

我的问题:可以优化吗?如果可以,请发布代码

这看起来优化到边缘:

int main( int argc, char **argv )
{
    puts( "input :5");
    puts( "     0");
    puts( "    101");
    puts( "   21012");
    puts( "  3210123");
    puts( " 432101234");
    puts( "54321012345");
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* Print a pyramid */

int
main(int argc, char **argv)
{
        int size = argc > 1 ? strtol(argv[1],NULL,10) : 5;
        if( size > 9 || size < 0) {
                fprintf(stderr, "Invalid size\n");
                return EXIT_FAILURE;
        }
        for(int line = 0; line <= size; line++) {
                char template[]="9876543210123456789";
                char *s = template + 9 - size;
                template[10 + line] = '\0';
                memset(s, ' ', size - line);

                if(puts(s) == EOF) {
                        perror("puts");
                        return EXIT_FAILURE;
                }
        }
        return EXIT_SUCCESS;
}
  1. <比较for循环相比,for 循环更多。 for(i=0;i<n+1;i++)写得更清楚for (i = 0; i <= n; i++)
  2. 如果你初始化一个值,例如int collen=n+2; ,然后像collen-1一样使用它,保存减法并对其进行初始化调整。
  3. if s 将这个复杂的内部循环分隔到它们自己的循环中。
  4. 使用更少的变量。
  5. 使用更多和一致的空格。

现在是我的解决方案,但就像你的解决方案一样,它只能处理从 0 到 9 的输入:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int n;

    printf("input :");
    if (scanf("%d", &n) != 1 || n < 0 || n > 9) {
        printf("input not recognized or invalid\n");
        return EXIT_FAILURE;
    }

    for (int i = 0; i <= n; ++i) {
        printf("%*d", n - i + 1, i);
        for (int j = i - 1; j >= 0; --j) {
            printf("%d", j);
        }
        for (int j = 1; j <= i; ++j) {
            printf("%d", j);
        }
        printf("\n");
    }
    return EXIT_SUCCESS;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM