用最少的 for 循环创建数字模式

Posted

技术标签:

【中文标题】用最少的 for 循环创建数字模式【英文标题】:Creating number pattern with minimum for loops 【发布时间】: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 你应该检查我的解决方案,它是通用的并且更易于阅读。 【参考方案1】:

java-8问题的解决方案:

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 我希望你试试我的解决方案。

以上是关于用最少的 for 循环创建数字模式的主要内容,如果未能解决你的问题,请参考以下文章

您如何设置一个 for 循环,该循环基本上以循环模式运行一定数量的数字?例如,如何从 123 到 231 到 312

for循环

有什么比for循环更好的方法来实现涉及集合的算法?

phthon 怎么用for 循环excel 中一行的数字

有没有办法用 char 变量创建一个 for 循环来创建多个绘图?

为啥for循环最少避免使用浮点型变量作为循环变量