HackerRank楼梯C混乱

时间:2017-06-01 22:27:23

标签: c

嗨,我很新,并试图通过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;
}

我很困惑这个问题是什么,以及为什么我的楼梯比预期的问题更加间隔?我一直在尝试解决这个问题,而且非常需要任何帮助。

我的输出:

      #
     ##
    ###
   ####
  #####
 ######

*编辑 - 感谢您的帮助,所有答案都很有帮助。

2 个答案:

答案 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);
}