黑马程序员技术交流社区
标题:
一道编程题,求思路
[打印本页]
作者:
Imp_x
时间:
2014-8-22 01:00
标题:
一道编程题,求思路
题目:打印出杨辉三角形(要求打印出
10
行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…………
三角形、空心棱形我会打印,但是这个杨辉三角......中间的数令我捉急,求思路
作者:
单线程xia
时间:
2014-8-22 01:10
中间的数是它上面两个数的和
作者:
地狱天堂
时间:
2014-8-22 03:13
本帖最后由 地狱天堂 于 2014-8-22 03:24 编辑
public class Test4 {
public static void main(String[] args) {
System.out.println("*******从1开始,打印10行********");
getNum(1,10);
System.out.println("*******从2开始,打印5行*******");
getNum(2,5);
}
//num第一行中间的数字,line=需要打印的行数
public static void getNum(int num,int line){
//定义二维需要多长?根据规律2行需要5个,3行需要7个,就定义个lenths=line*2+1的长度。
int lenths=line*2+1;
//定义个二维数组记数
int[][] in=new int[line][lenths];
//把数字插入到数组第一行中间。
in[0][lenths/2]=num;
//从第二行开始第n个(不包括第一个和最后一个),等于第一行的(n-1)+(n+1)
for (int i = 1;i < line; i++) {
for (int j = 1; j <lenths-1; j++) {
in[i][j]=in[i-1][j-1]+in[i-1][j+1];
}
}
//把数组中的0去除,然后打印
StringBuilder str=new StringBuilder();
for (int i = 0; i <line; i++) {
for (int j = 0; j < lenths; j++) {
if(in[i][j]==0){
str.append(" ");
continue;
}
str.append(in[i][j]);
}
str.append("\n");
}
System.out.println(str.toString());
}
}
复制代码
打印结果:
*******从1开始,打印10行********
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
*******从2开始,打印5行*******
2
2 2
2 4 2
2 6 6 2
2 8 12 8 2
作者:
Imp_x
时间:
2014-8-22 20:40
单线程xia 发表于 2014-8-22 01:10
中间的数是它上面两个数的和
这个我知道= =就是代码没思路敲出来
作者:
Imp_x
时间:
2014-8-22 20:48
地狱天堂 发表于 2014-8-22 03:13
打印结果:
*******从1开始,打印10行********
1
过来膜拜一下大神{:3_64:}学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2