2014-10-05 98 views
0

我想把數字,可以是一個,兩個,三個,四個等數字的形狀。儘管如此,額外的空間已經轉移。此外,中心轉移。我嘗試不同的方式,但是,我不能。我該如何解決這個問題。謝謝你所有讚賞的答案。把一個數字放在一個空心的形狀

輸出的例子是: http://i.stack.imgur.com/Kozr1.png

#include <stdio.h> 

/* Function Prototypes */ 
int countNumber(int number); 

int main() { 

    int n;       /* number to put in the center of the shape  */ 
    int column, row;    /* take values of column and row via user  */ 
    int columnCount, rowCount;  /* count number of column and row    */ 
    int i;       /* count how many spaces remained    */ 

    printf("Enter column:\n>"); 
    scanf("%d",&column); 
    printf("\nEnter row:\n>"); 
    scanf("%d",&row); 
    printf("\nEnter number for center:\n>"); 
    scanf("%d",&n); 

    if((10<column && column<40) && (10<row && row<40)){ 
    for (columnCount = 0; columnCount < column; columnCount++) { 

     for (rowCount = 0; rowCount < row; rowCount++) { 

      /* Middle Row */ 
      if (columnCount == column/2) { 
       printf("#"); 

       for (i = 0; i < ((row*2-3)-countNumber(n))/2;i++) 
        printf(" "); 

       printf("%d", n); 

       for (i = 0; i < ((row*2-3)-countNumber(n))/2;i++) 
        printf(" "); 

        printf("#"); 
       break;    
      } 

      if (columnCount==0 || columnCount==column-1 || rowCount==0 || rowCount==row-1) 
       printf("# "); 
      else 
       printf(" "); 

     } 
     printf("\n"); 
    } 
    } 
     else 
      printf("Please enter value btw 10-40"); 
    return 0; 
} 
/* Function */ 
int countNumber(int number) { 

    int count; 

    for(count=0;0<number;count++) /* the number how many decimal places have */ 
      number/=10; 

    return count; 
} 
+0

請添加純文本輸出這樣在您的文章。把它作爲圖像不會增加任何有用的東西。 – usr2564301 2014-10-05 11:08:31

+1

trivally可調試。不要告訴我你不知道是什麼原因造成的。 – 2014-10-05 11:08:33

+0

注意:'column' as * outer * loop沒有任何意義。 – 2014-10-05 11:11:12

回答

-1

這應該工作!

它仍然有錯誤的小幅度的,但我設法解決它

/*Import*/ 
#include <stdio.h> 

/*Function Prototyp*/ 
int countNumber(int number); 

int main() { 

    /*Variable*/ 
    int number, column, row; 
    int columnCount, rowCount; 
    int i; 

    printf("Enter column:\n>"); 
    scanf("%d",&column); 
    printf("\nEnter row:\n>"); 
    scanf("%d",&row); 
    printf("\nEnter number for center:\n>"); 
    scanf("%d",&number); 


    for (columnCount = 0; columnCount < column; columnCount++) { 

     for (rowCount = 0; rowCount < row; rowCount++) { 

      //Middle Row 
      if (columnCount == column/2) { 
       printf("*"); 

       for (i = 0; i < ((row*2-3)-countNumber(number))/2;i++) 
        printf(" "); 

       printf("%d", number); 

       for (i = 0; i < ((row*2-3)-countNumber(number))/2;i++) 
        printf(" "); 

       if (countNumber(number % 2 == 0)) 
        printf(" *"); 
       else 
        printf("*"); 
       break; 
      } 

      if (columnCount==0 || columnCount==column-1 || rowCount==0 || rowCount==row-1) 
       printf("* "); 
      else 
       printf(" "); 

     } 
     printf("\n"); 
    } 


    return 0; 
} 

int countNumber(int number) { 

    int count; 

    for (count = 0; number > 0; count++) 
     number = number/10; 

    return count; 
} 
+0

1.「列」和「行」與預期相反。 (OP也錯了。)2. if(countNumber(number%2 == 0))'括號錯位(並且它只是偶然的,因爲'countNumber'返回值爲'0'的錯誤計數!)。 (2a。在除法之前加1到'(row * 2-3)-countNumber(number)'之一,所以你不需要它。)3.(小)輸入可以是負數;提到這只是因爲'countNumber'中的一個小改動可以解決它。 – usr2564301 2014-10-05 22:27:06

0

這一個適用於任何數量的

#include <stdio.h> 
int digits(int n) 
{ 
    int i; 
    for(i=0;n;i++,n=n/10); 
    return i; 
    } 
int main() 
{ 
    int i,j; 
    int column,row; 
    int n,cnt; 

    printf("Enter column: "); 
    scanf("%d",&column); 
    printf("Enter row: "); 
    scanf("%d",&row); 
    scanf("%d",&n); 
    cnt=digits(n); 

    for(i=0;i<row;i++) 
    { 
     for(j=0;j<column;j++) 
     { 
      if(i==0 || i==(row-1) || j==0 || j==(column-1)) 
       printf("*"); 
      else if((i==(row/2)) && (j==((column-cnt)/2))) 
      { 
       printf("%d",n); 
       j=j+(cnt-1); 
      } 
      else 
       printf(" "); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+0

感謝您的感謝,不幸的是,如果n有多個數字,我們該怎麼辦? – NewCoder 2014-10-05 12:03:57

+0

我以爲你擔心中間行的空間排列問題,所以我剛剛修正了你的程序。如果你想在矩形內部有更多的數字,那麼你必須指定你想要的模式。 – 2014-10-05 12:06:34

+0

仔細查看當數字超過一位數字時會發生什麼。這是OPs問題的一部分。 – usr2564301 2014-10-05 12:14:32