【问题标题】:Creating number pattern with minimum for loops用最少的 for 循环创建数字模式
【发布时间】:2012-09-28 02:24:43
【问题描述】:

如何使用最少的 for 循环创建以下数字模式。是否有任何数学上给数字模式命名的名称,例如斐波那契、帕斯卡三角形、任何其他有趣的模式,这些模式很复杂但可以使用 for 循环?

预期的 O/P 模式:

    1
    22
    333
    4444
    55555
    6666
    777
    88
    9 

// For 循环只打印从 1 到 5 它正确打印并且在反转时会出现错误的输出。

for(int i=1; i<10; i++)
{
for(int j=1,k=10; j<=i&&k>5; j++,k--)   
        {
            if(i<=5)
            System.out.print(i);
            else
            if(i>5)
            System.out.print(i);
        }
            System.out.println();
}

【问题讨论】:

  • @RandMate 你应该检查我的解决方案,它是通用的并且更易于阅读。

标签: java for-loop design-patterns minimum


【解决方案1】:

问题的解决方案:

IntStream.range(MAX * -1, MAX)
            .forEach(i -> IntStream.rangeClosed(1, MAX - Math.abs(i))
                    .mapToObj(j -> j == MAX - Math.abs(i) ? MAX - Math.abs(i) + "\n" : MAX - Math.abs(i) + " ")
                    .forEach(System.out::print)
            ); 

【讨论】:

    【解决方案2】:

    @RandMate 你可以这样做: 要打印此图案,您必须将图案分成两部分并使用 两组嵌套for循环: 开始: 整数 i,j,p; /要打印的第一个嵌套循环 1 22 333 4444 55555/ for(i=1;i { for(j=1;j

    /*this is the second nested loop to print
     6666
     777
     88
     9 */
        p=6;
      for(i=4;i>=1;i--)
      {
       for(j=1;j<=i;j++)
       {
        System.out.print(p);
       }
        p=p+1;
       System.out.println();
      }
    
      Hope it was helpul.
      ALL THE BEST......enjoy!
    

    【讨论】:

      【解决方案3】:

      这是一个没有循环的解决方案(递归)

      public class NumberTriangle {        
      
          public static void print(int top_, int count_, int length_) {
              int top = top_;
              int count = count_;
              int length = length_;
              count++;        
      
              if (count <= top){
                  length++;           
              } else {
                  length--;
              }
      
              if (length == 0) {
                  return;
              }       
      
              String s = String.format(String.format("%%0%dd", length), 0).replace("0",""+count);     
              System.out.println(s);
      
              NumberTriangle.print(top, count, length);
          }
      
          public static void main (String args[]){
      
              NumberTriangle.print(5,0,0);
      
          }   
      
      }
      

      【讨论】:

        【解决方案4】:

        另一个逻辑更简单的解决方案:

        public static void main(String[] args) {
            int input = 5;
        
            for (int i = 1; i <= 2 * input - 1; i++) {
                for (int j = 0; j < input - Math.abs((input - i)); j++)
                    System.out.print(i);
                System.out.println();
            }
        }
        

        您根据元素与输入的差异的绝对值打印元素。 如果您将输入更改为另一个值,这仍然有效。

        【讨论】:

        • 迭代比上一个好理解,顺便说一下哪种代码模型效率高,
        • Sergei 的答案使用 1 个循环,但我的使用 2 个循环。所以对于更大数量的输入(在我们的例子中是 5 个),我猜他的代码会运行得更快。无论如何,如果我的回答很聪明,你可以投票赞成。
        【解决方案5】:

        你在这里:

        for (int i = 1, j = 1 ; i < 10 ; i++, j = (i <= 5) ? (j*10 + 1) : (j/10))
            System.out.println(i * j); 
        

        【讨论】:

        • @RandMate 我希望你试试我的解决方案。
        猜你喜欢
        • 1970-01-01
        • 2020-07-27
        • 2021-04-28
        • 2014-06-10
        • 1970-01-01
        • 2023-01-17
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多