我的任务是打印出三角形数字的数字,直到金字塔形状的最终值,但我不能为我的生活得到均匀的间隔和居中,我不能只使用{{1因为它必须适用于我们输入的任何数字。我已经尝试了理由,使用单独的变量来根据用户定义的数字计算间距,但没有一个工作。
我们的结果应该看起来像这个图像,以15为例。
到午夜时分,我们已经好几天了。我的代码有点长:
%6i
这就是我们目前的样子。
答案 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()
之类的内容来查看数字的宽度,并适当调整计算结果。