1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

解决方案 »

  1.   


    public class te {    static int n = 5;    public static void main(String[] args) {
            for (int i = 0; i < n; i++) {
                for (int j = 1; j <= n - i; j++) {
                    System.out.printf("%4d", a(i + j) - i);
                }
                System.out.println();
            }
        }    static int a(int a) {
            return (a * a + a) >> 1;
        }
    }
      

  2.   

    第一行:a1=1 a2=a1+2 a3=a2+3 ……an=an-1+n
            故有:an-an-1=n
                  an-1-an-2=n-1
                  ……
                  a2-a1=2
                  a1=1
                  以上各式相加可知:an=n(n+1)/2.第一列:a1=1 a2=a1+1 a3=a2+2 ……an=an-1+n-1
            故有:an-an-1=n-1
                  an-1-an-2=n-2
                  ……
                  a2-a1=1
                  a1=1
                  以上各式相加可知:an=n(n-1)/2+1.每一行遵循的规律都一样,每一列的第一个数可以根据第二个分析的过程得到结果。对于每一列,再在循环条件中加上限制,就可以得出结果了。以下是具体的代码实现:
    public class PrintNumbers{
      public static void main(String[]args){
        for (int = 1; i < 6; i++) {
          for (int j = 1; j < 6; j++) {
            int printNumber = i * (i-1) / 2 + 1 + i * (j - 1) + j * (j - 1) / 2;
            if(printNumber < 16){
              System.out.print(printNumber + "  ");
            }
          }
            System.out.println();
        }
      }
    }