【问题标题】:How to solve this peculiar nested for loops exercise?如何解决这个特殊的嵌套 for 循环练习?
【发布时间】:2012-05-05 19:02:05
【问题描述】:

我学习 C 编程已经有一段时间了,我偶然发现了这个我似乎无法解决的练习:

  • 编写导致显示以下输出的循环嵌套:

    0
    01
    012
    0123
    01234
    012345
    01234
    0123
    012
    01
    0
    

到目前为止,我已经成功到达第六排,但我无法完成练习。 这是我为获得此问题的一半解决方案而编写的代码:

#include <stdio.h>

int
main(void)
{

int i, j;

for(i = 1; i <= 6; ++i) {
for(j = 0; j < i; ++j)

    printf("%d", j);
    printf("\n");

 }

return(0);

}

答案经过一些研究,很清楚;可能对研究同一学科的人有用,因此无缘无故地被否决了。

【问题讨论】:

  • 另一个类似于第一个的嵌套循环呢?
  • 有人给出了我需要的答案,但已被删除。
  • 可能是因为 Stack Overflow 禁止解决作业,您必须按照以下建议自行解决问题
  • 很奇怪,我在常见问题解答中看到过,不能指望书中的每一个练习都有答案,而且问题必须具体:这完全没问题。不只是暗示要教一个跛子像他那样边走路边走路吗?也许我应该问不同类型的问题,和大学同事一起解决练习。我仍然需要了解 Stack Overflow 的哲学。
  • 如果有人为您提供了完整的答案,那么整个练习就毫无价值。您需要自己了解语言机制,以便将其长期保留在您的记忆中。

标签: c recursion for-loop procedural-programming repeat


【解决方案1】:

你实际上可以用一个嵌套循环来做到这一点:

#include <stdio.h>

int getLength(int i) {
    /* Since this is homework, I'll leave this for you to complete. */
    if (i < ?) return ?;
    else return ?;
}

int main(void) {
    for(int i = 0; i < 11; ++i) {
        int length = getLength(i);
        for(int j = 0; j < length; ++j) {
             printf("%d", j);
        }
        printf("\n");
    }

    return 0;
}

【讨论】:

  • 谢谢!直到我完全理解为止。
  • 要小心那个问题,因为问题要求的是巢,而不是巢;)但是,您可能会因为提供它作为额外答案并归功于您的灵感来源而获得奖励积分。
  • 这个练习不是一个作业,所以这里的目标是理解嵌套的 for 循环,所以这不会是一个问题......添加模块化编程是一个很好的,谢谢。 (我怎样才能将其作为额外的答案?)
【解决方案2】:

问题中有一条线索:“写nests of loops”。数数,然后倒数。

【讨论】:

    【解决方案3】:

    由于这是一个练习,我只会提示一个解决方案,因为要知道你真的应该自己做这个。

    1. for 循环可以反向进行。
    2. 您可以有多个嵌套循环。

    【讨论】:

    • 感谢您的提示,我需要最终答案,因为我无法理解嵌套 for 循环的内部工作原理,因此我认为通过获得完整答案可以获得更多见解;除了第四天做同样的运动开始变得痛苦之外。
    • @AdrianWoodhouse - 使用单个嵌套循环查看来自 Mark Byersanswer。如果您能理解这一点,那么您就可以放心地了解循环。
    • 好的,谢谢;最后,我明白了我在辨别将多个循环嵌套到另一个循环与同时具有不同的嵌套循环之间的区别时遇到了问题。
    【解决方案4】:
    for(int i=0;i<=10;i++)
    {
        if(i<=5)
        {
            for(int k=0;k<=i;k++)
    
            printf("%d",k);
        }
        else if(i>5)
        {
            for(int j=0;j<=(10-i);j++)
                printf("%d",j);
        }
        printf("\n");
    }
    

    希望对你有帮助

    这是默认答案

    【讨论】:

      【解决方案5】:

      我认为用户应该告诉直到打印哪个数字。所以我的代码有点复杂。

      包括

      包括

      int main (void) {

         int rows;
         int counter;
         int backward;
         int forward;
      
      printf("Till which number you want to print??");
      scanf("%d",&rows);
      for(counter=0;counter<=rows;counter++)
          {for(forward=0;forward<=counter;forward++)
              printf("%d",forward);
                  printf("\n");
              }
      
      for(counter=rows;counter>=0;counter--)
                  {for(backward=0;backward<=counter;backward++)
              printf("%d",backward);
                      printf("\n");    
              }
      
      getch();
      return 0;
      

      }

      谢谢你!

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        • 2016-05-20
        相关资源
        最近更新 更多