2014-10-05 44 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