簡體   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