找到余数时带间距的逻辑

时间:2013-06-10 18:29:31

标签: c division spacing

所以我有这段代码:

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


int main(void)
{
int i,k,m,l;
int add=0;
for(i=1;i<11;i++)
{
    printf("%-2d: ",i);
    for(k=i;k>0;k--)
    {
        m=i/k;
        if(i%k==0)
        {
            m=i/k;
            add=add+m;
            printf("%d ",m);
        }
        else
            printf("  ");
    }
    for(l=(10-i);l>0;l--)
        printf("  ");
    printf("| %d \n",add);  
    add=0;
   }

}

现在代码发现剩余部分都很好,但是我遇到了分区之间的间隔问题(几乎是else语句)。

这是我的程序输出的内容:

 1: 1                             |  1 
 2: 1  2                          |  3 
 3: 1     3                       |  4 
 4: 1     2  4                    |  7 
 5: 1           5                 |  6 
 6: 1        2  3  6              | 12 
 7: 1                 7           |  8 
 8: 1           2     4  8        | 15 
 9: 1                 3     9     | 13 
10: 1              2        5  10  | 18

这就是我需要的样子:

 1:  1                            |  1
 2:  1  2                         |  3
 3:  1     3                      |  4
 4:  1  2     4                   |  7
 5:  1           5                |  6
 6:  1  2  3        6             | 12
 7:  1                 7          |  8
 8:  1  2     4           8       | 15
 9:  1     3                 9    | 13
10:  1  2        5             10 | 18

所以,我需要所有相同的数字来排队。

1 个答案:

答案 0 :(得分:0)

您只需修改一些行,请参阅以下评论:

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


int main(void)
{
int i,k,m,l;
int add=0;
for(i=1;i<11;i++)
{
    printf("%2d: ",i); // align to rigth
    for(k=1;k<=i;k++) // Invert loop order
    {
        m=i/k;
        if(i%k==0)
        {
            // m=i/k; Remove it. Duplicated!
            add=add+m;
            printf("%2d ",k); // use 2 digits and print k
        }
        else
            printf("   "); // three spaces
    }
    for(l=(10-i);l>0;l--)
        printf("   "); // three spaces
    printf("| %2d \n",add); // use 2 digits for print  
    add=0;
   }
}