使用单个循环打印菱形数字?

时间:2017-07-28 10:52:26

标签: java c for-loop

我说的是打印这种模式

       1
      121
     12321
    1234321
   123454321
  12345654321
 1234567654321
123456787654321

使用多个for循环非常容易。但我试图使用单个for循环来实现它但不能这样做。 有可能吗?

my code:- 

    StringBuilder sb = new StringBuilder();
    for (int i = 1; i <= 8; ++i) {
    System.out.println(sb.append(i)
    + new StringBuilder(sb).reverse().substring(1));

但我真的很想看看它是如何看待它被用于任何预定义的函数,如reverse()等可用的,它们本身在它们内部使用循环。 只是一个简单的“for”循环。

5 个答案:

答案 0 :(得分:4)

使用

这一事实
1*1 = 1
11*11 = 121
111*111= 12321 
 ....

你可以这样做:

public static void main(String[] args) { 
    int j = 0;
    for(long i = 1 ; i<1000000000; i = i+(long)Math.pow(10, j)){
        System.out.println(i*i);
        j++;
    }
}

答案 1 :(得分:3)

这是一种仅使用一个循环来写出这种模式的方法:

class RhombusNumbers{

    public static void main(String[] args){
        String left = "";
        int max = 8;
        for(int i = 1; i <= max; i++){
            System.out.println(left + i + new StringBuilder(left).reverse().toString());
            left+=i;
        }
    }

}

它会跟踪左侧数字,并且每次都会添加一个新数字。

修改

没有StringBuilder,因为StringBuilder.reverse()使用循环并且还会反转10:

class RhombusNumbers{

    public static void main(String[] args){
        String left = "";
        String right = "";
        int max = 8;
        for(int i = 1; i <= max; i++){
            System.out.println(left + i + right);
            left+=i;
            right = i + right;
        }
    }

}

答案 2 :(得分:1)

就像这样。

#include <stdio.h>

int main(void){
    for(int i = 1, n = 1, d = 1; n <= 8; i += d){
        if(i == n){
            d = -d;
        } else if(i == 0){
            d = -d;
            ++n;
            puts("");
            continue;
        }
        printf("%d", i);
    }
}

答案 3 :(得分:0)

你可以通过递归来解决它:

class Rhombus {
  public static void left(int x) {
    if (--x > 0) {
      left(x);
      System.out.print(x);
    }
  }

  public static void right(int x) {
    if (--x > 0) {
      System.out.print(x)
      right(x);
    }
  }

  public static void main(String[] args) {
    for (int i = 1; i <= 3; i++) {
      left(i);
      System.out.print(i);
      right(i);
      System.out.println();
    }
  }
}

答案 4 :(得分:0)

试试这个。

StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 8; ++i) {
    System.out.println(sb.append(i)
        + new StringBuilder(sb).reverse().substring(1));
}