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

时间:2012-10-07 18:22:05

标签: java for-loop design-patterns minimum

如何使用最少的for循环创建以下数字模式。是否有任何数学模型给出的数字模型,如Fibonacci,pascal三角形,任何其他有趣的模式,这些模式很复杂但可能使用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();
}

5 个答案:

答案 0 :(得分:2)

你在这里:

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

答案 1 :(得分:2)

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

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();
    }
}

您可以根据输入的差异绝对值打印元素。 如果您将输入更改为其他值,这仍然有效。

答案 2 :(得分:1)

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

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);

    }   

}

答案 3 :(得分:0)

解决问题的方法:

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)
            ); 

答案 4 :(得分:-1)

@RandMate你可以这样做:     要打印此图案,您必须将图案分成两部分并使用     两组嵌套for循环:     开始:      int i,j,p;      / 第一个嵌套循环打印       1       22       333       4444       55555 /      对于(I = 1; I&LT; = 5;我++)
     {       为(J = 1; J&LT; = I; J ++)       {        是System.out.print(ⅰ);       }       的System.out.println();      }

/*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!