【问题标题】:Using nested for loops使用嵌套的 for 循环
【发布时间】:2013-12-13 14:12:54
【问题描述】:

我的规格如下:

编写一个程序,打印出两个数字加起来为 7 的所有排列。提示:您可以使用两个嵌套的 for 循环。

我已经这样做了,但我知道这是不正确的。我应该输入什么数字?

public class NestedFor {

  public static void main(String[] args) {

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

【问题讨论】:

  • 你还需要检查数字i,j加起来是否为7
  • 不是重复的,这次提供了代码
  • 另外,按照几乎普遍接受的约定,将你的类名命名为 CamelCase,以大写字母开头。
  • @RossDrew 我认为这就是“暂停”“编辑”和“重新打开”的整个想法

标签: java loops for-loop nested-loops


【解决方案1】:

试试这个(我假设你想要非负数,否则你有无限的可能性):

for(int i=0; i<=7, i++)
{
   System.out.println(i + "+" + (7-i));
}

不需要两个 for 循环。

如果你需要正数而不是非负数,这将变成:

for(int i=1; i<7, i++)
{
   System.out.println(i + "+" + (7-i));
}

【讨论】:

  • 我要做的唯一风格改变是在7-i 周围添加括号。除此之外,这是一个简洁明了的解决方案!
【解决方案2】:

你快到了。以下是您需要考虑的事项:

  • 假设要求数字为正数,则外循环应从16(含),而不是从13
  • 数字不需要按顺序排列。因此,您不应该在i 处停止内循环,也从16,包括
  • 您需要在打印ij 之前添加if 检查。

一旦你解决了上述三件事,你的程序就应该可以工作了。祝你好运!

【讨论】:

  • @ssssteffff 你确实想同时获得1+66+1,否则它不会提取一些permutations
【解决方案3】:

您的循环应该都在 1 和 7 之间循环。然后在最后一个 for 循环中,您需要检查 i 和 j 的总和是否等于 7。如果是,则打印这两个数字。

【讨论】:

    【解决方案4】:

    你真的不需要嵌套循环。

    for (ii = 0; ii<8; ii++) {
      System.out.printf("(%d, %d)\n",ii,7-ii);
    }
    

    保持简单。

    我知道“提示”说您可以使用两个嵌套循环;但根据我的经验,一点点聪明也不容忽视。当你的问题变得更大时,O(n) 而不是 O(N^2) 是一个巨大的差异......

    【讨论】:

      【解决方案5】:

      试试这个:

      for(int i=0;i<7;i++){ //First Loop
          for(int j=7;j>0;j--){//Send loop
              if((i+j)==7) System.out.println(i+" , "+j); //Permutations printed to terminal
          }
      }
      

      我想这是自我解释,两个循环相互接近。运行它,看看可爱的结果;)

      在数学中,置换的概念与置换(重新排列)对象或值的行为有关。

      【讨论】:

      • 同样的代码可以用一个循环运行:for(int i=0, j=7;i
      【解决方案6】:

      一些调整:我冒昧地发布一个解决方案,但请确保您理解它!

      for (int i = 0; i <= 7/*Need to consider all numbers from 0 to 7*/ ; ++i) {
          for (int j = 0; j <= i /*Don't overoptimise: this is good enough and will not generate duplicates*/; j++) {
                  if (i + j == 7){
                      System.out.println(i+ "," +j);
                  }
           }
      }
      

      这不是最快的方法;找到解决方案后,花一些时间进行优化。

      【讨论】:

        【解决方案7】:
        public class NestedFor {
        
          public static void main(String[] args) {
            for(int i=1; i<=7; i++) {
              for(int j=1; j<i; j++) {
                if (i + j == 7 ) {
                  System.out.println(i+ "   " +j);
                }
              }
             }
           }
        }
        

        【讨论】:

        • (5,2) 丢失。这只是一个例子。
        • @user3099447 我希望,为了你自己的利益,你意识到在另一个你问的关于 7 sum 问题的问题中,当有人建议你为此使用嵌套 for 循环时,他们是在开玩笑并采取利用你表面上对这件事的无知。请开始学习,这是你变得更好的唯一途径。婴儿步。
        • @arvaladze 这不能正常工作。它不会显示 i
        【解决方案8】:

        检查它们加起来是否为 7

        if (i+j == 7)
        {
          //then they add to 7
        }
        

        如果您希望所有介于 1 和 7 之间的数字加起来为 7,则它们都应该介于 1 和 7 之间。如果您想包括 0,请从那里开始。

         for (int i=1; i<=7; i++)
        

        ...您可能希望排除重复项

        for(int i=1; i<=7; i++) {
          for(int j=i; j<=7; j++) { //starts at i, not 1
           /* Only check j against numbers equal to or lower than itself
           /* to avoid duplicates
            */
          }
        }
        

        另外

        按照惯例,类名应该以大写字母开头,并且在驼峰式中(短语中的每个单词都有大写字母

        NestedFor 
        

        【讨论】:

          猜你喜欢
          • 2021-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-04
          • 2016-07-23
          相关资源
          最近更新 更多