嗨,我很新,并试图通过hackerrank改善,我在楼梯练习staircase excercise
然而我的输出与问题不同,因为看起来我的楼梯在结果前面有一个额外的空间,因此使它不正确。这是我的代码。
#include <stdio.h>
int main ()
{
int size = 0;
//input size of staircase
scanf("%d" , &size);
//create array to hold staircase
char list [size];
//iterate through and fill up array with spaces
for (int i = 0; i <size; ++i)
{
list[i] = ' ';
}
//the iterate backwards -1 each time replacing each spcae with a '#' and printing each stair case starting from smallest at the top.
for (int i = size; i >0; i--)
{
list[i] = '#';
printf("%s\n", list);
}
return 0;
}
我很困惑这个问题是什么,以及为什么我的楼梯比预期的问题更加间隔?我一直在尝试解决这个问题,而且非常需要任何帮助。
我的输出:
#
##
###
####
#####
######
*编辑 - 感谢您的帮助,所有答案都很有帮助。
答案 0 :(得分:0)
长度为size
的数组从0
索引到size - 1
:
E.g。 size == 4
:
[0][1][2][3]
在你的第二个循环中,你从size
转到1
,首先在数组外面写,最后保持第一个条目不变:
[ ][#][#][#] #
您必须将第二个循环更改为
for (int i = size - 1; i >= 0; i--)
或者做
list[i - 1] = '#';
而不是list[i] = '#'
。
答案 1 :(得分:0)
有几个错误:
1)您忘记在字符串末尾添加空字符('\0'
)。这样做:
for (int i = 0; i <size; ++i)
{
list[i] = ' ';
}
list[i] ='\0';
2)
for (int i = size; i >0; i--)
{
list[i] = '#';
printf("%s\n", list);
}
此处您尝试访问该字符串的索引无效(当i = size时)。这样做:
for (int i = size-1; i > -1; i--)
{
list[i] = '#';
printf("%s\n", list);
}