Java程序,编程输出如下数字图案,最好带解释!

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

其实只要算出第i行第j列的数是第几个数就行了(数的排列规律应该能看出来吧)

第i行第j列的数在第(i+j)条对角线上(从零开始),前面就有i+j条对角线

数的个数就是1+2+...+(i+j),在加上同一条对角线上前面的数的个数为j

所以公式就出来了 代码如下,请采纳

class  Main
{
 public static void main(String[] args) 
 {
  for(int i=0;i<5;i++)
  {
   for(int j=0;j<5-i;j++)
   {
    int n = (1+i+j)*(i+j)/2+j+1;
    System.out.print(n+" ");
   }
   System.out.println();
  }
 }
}

追问

不是很明白,对角线?

追答

这些数不是沿着对角线排列的么,如图

追问

谢谢啦!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-03
public class Test {

public static void main(String[] args) {
int x = 1; //x代表行,从第一行第一个数1开始

for(int i = 1 ; i <= 5 ; i ++ ) {

int y = x;//y代表列,每行第一个数

System.out.print(x + "  ");//打印每行第一个数

for(int j = i; j < 5 ; j ++) {
/**
 * 1(+2)  3(+3)  6(+4)  10(+5)  15 
 * y(j+1) y(j+1) y(j+1) y(j+1)
 * j = i ,行数增加,列数减少.
 */
y += j + 1;
System.out.print(y + "  ");
}
System.out.println(); 
/**
 * 1(x)  + 1(i)
 * 2(x)  + 2(i) 
 * 4(x)  + 3(i)
 * 7(x)  + 4(i)
 * 11(x) + 5(i)
 *
 * 每下一行的第一个数 = 当前行的第一个数 + 行数i
 * 在行数 i ++ 之前,得到下一行第一个数 x = x + i;
 */
x += i; 
}
}
}

第2个回答  2015-05-03
public class Test
{
public static void main(String[] args) {
for(int i=0;i<5;i++){
for(int j=0;j<5-i;j++){
int n = (1+i+j)*(i+j)/2+j+1;
System.out.print(n+" ");
}
System.out.println();
}
}
}
相似回答