如何将此C三角数生成器的数字居中?

时间:2018-03-13 04:08:37

标签: c numbers center triangular

我的任务是打印出三角形数字的数字,直到金字塔形状的最终值,但我不能为我的生活得到均匀的间隔和居中,我不能只使用{{1因为它必须适用于我们输入的任何数字。我已经尝试了理由,使用单独的变量来根据用户定义的数字计算间距,但没有一个工作。

我们的结果应该看起来像这个图像,以15为例。

Our result should look like this image

到午夜时分,我们已经好几天了。我的代码有点长:

%6i

这就是我们目前的样子。

This is what ours currently looks like

2 个答案:

答案 0 :(得分:0)

看起来你很近,你离开的原因似乎是你的号码之间总是有一个空格。第一个图像在数字之间有多个空格,弄清楚如何根据数字中的位数来计算空格数,你应该拥有它。

问题规范是否应该包含多少空格,或者金字塔的最终对齐应该是什么?

这非常接近您所需要的,唯一的区别是每行开头有额外的2个空格,因为开始底行的3位数仍然使用5个空格。因此,您可能需要弄清楚如何对每行中的第一个数字使用精确 // Adding an active class $('.donation-level-input-container label').on('click hover', function(e){ var currentTab = $(this).attr('for'); $('.donation-level-user-entered').removeClass('active'); $('.donation-level-input-container label').each(function(){ if($(this).hasClass('active')) { $(this).removeClass('active'); } }); $(this).addClass('active'); $('.donation-level-user-entered input').val('') }); $('.donation-level-user-entered input').on('focus', function(e) { var currentTab = $(this).attr('for'); $('.donation-level-input-container label').each(function(){ if($(this).hasClass('active')) { $(this).removeClass('active'); } }); $('.donation-level-user-entered').addClass('active'); }); }); }); 个数字,其中x等于底行中第一个数字的位数,本例中为3。

x

输出:

while (n <= triNum)
{


    space = n * 3;
    while (space>0, space<(triNum * 3))
    {
        printf(" ");
        space++;
    }

    //This loop prints the number associated with each asterisk in triangle format
    num = 1;
    while (num>0, num <= n)
    {
        printf("%5i ", number);
        number++;
        num++;
    }
    n++;
    printf("\n");
}

让我解释一下我改变了什么。我建议您在更新代码时遵循,这样您就可以理解并修复最后一点,并确保它适用于其他数字。

我注意到的第一件事是你在开始时没有获得足够的空间。鉴于每个数字最多为3位数,我认为你应该增加3个空格而不是1个,所以我改了

                                              1
                                           2     3
                                        4     5     6
                                     7     8     9    10
                                 11    12    13    14    15
                              16    17    18    19    20    21
                           22    23    24    25    26    27    28
                        29    30    31    32    33    34    35    36
                     37    38    39    40    41    42    43    44    45
                  46    47    48    49    50    51    52    53    54    55
               56    57    58    59    60    61    62    63    64    65    66
            67    68    69    70    71    72    73    74    75    76    77    78
         79    80    81    82    83    84    85    86    87    88    89    90    91
      92    93    94    95    96    97    98    99   100   101   102   103   104   105
  106   107   108   109   110   111   112   113   114   115   116   117   118   119   120

while (space>0, space<triNum)

这看起来好一点,但现在底行中有太多空格,所以当我们调整空格数时我觉得我们也应该减去3而不是1,所以我改了

while (space>0, space<(triNum * 3))

space = n;

这当然看起来像前面正确的空格数量,但事情似乎还没有排成一行。所以看着你正确的金字塔,我看到每个数字似乎占用了6个空格,所以我改变了

space = n * 3;

printf("%i ", number);

现在就是这样。它适用于我提出的许多不同的例子,但并非详尽无遗。我认为只要你不打印超过5位的数字就行了。如果空格的数量确实无关紧要(即必须是最小的并且仍然具有平衡的行),那么您可以将printf("%5i ", number); 中的宽度增加到可以容纳您必须容纳的最大数量的任何值。 / p>

答案 1 :(得分:0)

再次阅读printf()手册页。 (又一次,又一次又一次。当你每周阅读两次一周时,你可以在下个月每周阅读一次,然后在下一年每月阅读一次,之后每年一次对于生活 - 你仍然可能在30年后发现一些新东西,如果只是因为规范在那段时间内发生了变化。scanf()同样也是必要的,除非它更难;你可能需要阅读它两次一个星期一个月。)

您可以使用printf()变量(或值)来指示int打印的宽度,以指定宽度。

例如:

for (int i = 0; i < 10; i++)
    printf("[%*d%*s]\n", i + 3, 121, i, "");

将生成:

[121]
[ 121 ]
[  121  ]
[   121   ]
[    121    ]
[     121     ]
[      121      ]
[       121       ]
[        121        ]
[         121         ]

您可以使用snprintf()之类的内容来查看数字的宽度,并适当调整计算结果。