【问题标题】:Nested For loops, X-mas tree in C嵌套的 For 循环,C 中的 X-mas 树
【发布时间】:2015-02-13 13:56:06
【问题描述】:

所以我的任务是在 C 中创建一棵圣诞树,我知道这已经完成了,但是必须满足一些条件让我非常困惑,我什至不知道从哪里开始。

所以我们询问用户层数(层中有多少行),然后是层数。

现在,每一层中第一行之后的每一行都将在第一行的每一侧添加 2 个“*”(这只是一行带有一个“*”。)我们这样做直到层满足,然后开始下一层。当我开始新层时,我们从前一层的最后一层的每边减去 4( 2" * ",然后重复每边添加 1 "*" 的过程,直到层数满足(级别数是一开始就决定的,并且是恒定的。)

最后一部分是用“#”制成的宽度为 3、高度为 4 的树干完成。我不知道我应该如何设置这些循环,我会发布我到目前为止所做的(不多我不确定如何继续)

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


int main(){


int levels;
int levelcount;
int layers;
int i;
int j;

    printf(" How many levels should this tree have?\n");
    scanf("%d\n", levels);

    printf(" How many layers should this tree have?\n");
    scanf("%d\n");

for (level = 0;level <= levelcount ; levelcount++){


}








return 0;

}

例如,具有 2 层 3 层的样本输出将是

     *
    ***
   *****
     *
    ***
   *****
    ###
    ###
    ###
    ###

下面是我现在所在位置的一些更新代码

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


int main(){


int level;
int levelcount;
int layercount;
int layer;
int star;
int starcount;
int space;
int spacecount;
int spacenumber;

    printf("How many levels should this tree have?\n");
    scanf("%d\n", &level);

    printf(" How many layers should this tree have?\n");
    scanf("%d\n", &layer);

for (layer = 0;layer <= layercount ; layercount++){


                star= 2*level - 1;
                space= levelcount + level - star;

            for (spacecount =0; spacecount <=spacenumber; spacecount++)
                printf(" ");

            for (starcount= 0; star < starcount; starcount++)
                printf("%c" , '*');

            for (levelcount=1; levelcount=1;levelcout++)







}







return 0;

}

【问题讨论】:

  • 你能清除减法部分吗?什么应该是层,什么是关卡?也许你可以举个例子,树应该是什么样子。
  • 层数是指减法前的行数,从下一层开始。所以它是“*”,然后我们添加 2,所以它是在前一行“* * *”的每一侧的另一个开始,我们继续在每一侧添加 2 个星,直到满足行数(或级别) .如果用户指定了更多层。我们从第一层的最后一行减去 4 个总“*”开始下一层(每边 2 个“*”。然后再继续,直到层的 nemer 相遇。
  • layers是一层的行数,layers是指打印的次数。所以一个 4 层有 3 行,将有 3 行打印 4 次,但是我们要在层中的每一行添加 2 星(*),直到下一层开始,我们最初将减去 4 星,并且然后在下一行的每一边加 1,直到层被重复,直到满足 for 层的 for 循环。
  • level 1( *) level 2( ***) level 3 ( *****) level 4 ( *******) 现在我们开始下一层所以第一行已移除 4 颗星(每侧 2 颗。(第 2 层,第 1 层(***)第 2 层,第 2 层,(*****)等等。

标签: loops for-loop while-loop tree nested


【解决方案1】:

我猜这是你想看到的结果:

         *
        ***
       *****
      *******
     *********
    ***********
   *************
     *********
    ***********
   *************
  ***************
 *****************
*******************
        ###
        ###

这将是 2 层,每层 6 层。 因此,您首先想到在级别上使用 for 循环应该是好的:

        ***
       *****
      *******
     *********
    ***********
   *************

这是树的第一层。 要创建这个级别的层,我们需要另一个嵌套的 for 循环:

 for (level = 0;level <= levelcount ; levelcount++){
    for (layer=0; layer <= layers; layer++) {
       do_something
    }
 }

那么do_something 呢?好吧,这是棘手的部分,您必须计算要在这一行中打印的星数。
为此,让我们将 level/layer/# of stars 信息添加到树中:

         *            
        ***           1/1/3
       *****          1/2/5
      *******         1/3/7
     *********        1/4/9
       *****          2/1/5
      *******         2/2/7
     *********        2/3/9
    ***********       2/4/11

对于每一行,在行上加两颗星,我们可以推断开始的数量必须是行数的两倍。所以对于这些行,我的第一个猜测是stars = x + [(layer - 1) * 2]。这可以通过将 x 设置为每层顶部的星数来轻松批准。所以对于第二层x = 5 然后第二行是5 + [(2 - 1) * 2] = 7 或第一层第四行3 + [(4 - 1) * 2] = 9
要得到这个x,我们需要知道最后一层的最后一层中的星数并减去 4。我们也可以对此进行一些计算,但让我们简单点,记住我们使用的星数:

 int x = 3;
 for (level = 0;level <= levelcount ; levelcount++){
    for (layer=0; layer <= layers; layer++) {
       print_num_of_stars(x + ((layer - 1) * 2)
    }
    x = x + ((layers - 1) * 2) - 4
 }

现在你必须解决的最后一个问题是在 print_num_of_stars 中用所需数量的空格填充所有行,但这也只是另一个 for 循环。

希望这有帮助,如果我有时搞砸了层和关卡,请原谅。

【讨论】:

  • 所以我已经为树设置了所有循环,减去我们为下一层的第一行减去 4 星的循环。我也遇到了一个问题,我的程序在输入第一个值后没有进入下一个 printf。
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 2018-06-01
  • 2020-08-28
  • 1970-01-01
相关资源
最近更新 更多