【问题标题】:Nested loops to find counting numbers用于查找计数的嵌套循环
【发布时间】:2011-11-01 14:28:43
【问题描述】:

从没想过我在这里遇到了嵌套循环的问题 Iam:我想要实现的是:给定两个数字 A 和 B,我需要找到 1 和 A*B 之间的所有计数数字,例如 A=4 B= 3 我需要这个:

      1 2 3
      4 5 6
      7 8 9
      10 11 12

我写了最初的部分,但我不知道如何写下每一行中变化的值

      for(int i=1; i<=A; i++){
                 for(int j=1; j<=B; j++){
                      System.out.println("?");}}

拥有 A*B 给了我

    1 2 3
    2 4 6
    3 6 9
    4 8 12

我也尝试了其他一些组合,但没有运气,它可能看起来很简单,但这是我第一次面对这个。提前致谢!

【问题讨论】:

  • 循环for (int i = 1; i &lt;= A*B; i++)怎么样?
  • 查看所需矩阵中的模式。第 0 行从 1 开始,第 1 行从 4 开始,第 2 行 -> 7,第 3 行 -> 10。想出一个公式来复制它,你就成功了。提示:从 0 开始循环,而不是 1。提示 2:根据行号和 B 的值使公式起作用。

标签: java loops for-loop nested-loops


【解决方案1】:

解决方法简单得离谱,只需要多使用一个变量,然后从 1 数到 A*B。

q = 0;
for(int i=0; i<A; i++){
    for(int j=0; j<B; j++){
        q++;
        System.out.print(q + " ");
    }
    System.out.println();
}

【讨论】:

    【解决方案2】:
    for(int i=0; i<A; i++){
        for(int j=0; j<B; j++){
            System.out.print(B*i + (j + 1));
        }
        System.out.println("");
    }
    

    【讨论】:

    • 我认为这是数学上合理的解决方案。小修正,(B(i - 1) + j);应改为 (B*(i - 1) + j);
    • @Serith 谢谢你的收获。固定的。也从 1 循环切换到 0 循环。复制了 OP 的源代码并在没有意识到的情况下对其进行了编辑。我自己更喜欢以 0 为基数。
    【解决方案3】:
    for(int i=1;i<=A*B;i++)
    {  System.out.printf("%d%c",i,(i%B!=0?' ':'\n'));
    }
    

    for(i=1;i<A*B;i+=B)
    { for(j=i;j<i+B;j++)
      { System.out.printf("%d ",j);
      }
      System.out.println();
    }
    

    【讨论】:

    • 问题是关于嵌套循环。
    • 我猜反对者认为 printf 在 Java 中不可用。使用System.out.printf 可以更清楚地说明答案。但是,它应该是i%B
    • @Sam 是的,但这个答案确实为 OP 提供了一个更简洁的单行解决方案。 OP 可能不知道这样的事情甚至存在。
    【解决方案4】:
     for(int i=1; i<=A; i++){
                     for(int j=1; j<=B; j++){
                          System.out.print(B*(i - 1) + j);
                     }
                     System.out.println();
     }
    

    【讨论】:

    • 可能不应该使用 println
    • 你是对的,但我在回答公式问题(已编辑,谢谢)
    【解决方案5】:

    我不知道为什么它必须是一个嵌套循环?但是,这个可能会起作用

    for(int i=0; i < A; i++){
          for(int j=i*B; j<(i+1)*B; j++){
               System.out.print(j+1);
          }
          System.out.print("\n");
    }
    

    【讨论】:

      【解决方案6】:

      你可以试试(i-1)*B + j

      另一种选择是只使用 1 for 循环:

      int limit = A * B;
      for (int i = 1; i <= limit; i++) {
          System.out.print(i + " ");
          if (i % B == 0) {
              System.out.println();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-25
        • 1970-01-01
        • 2020-10-30
        • 1970-01-01
        • 2013-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多