黑马程序员技术交流社区

标题: 关于用java实现杨辉三角问题的不同方法总结 [打印本页]

作者: 王小丑    时间: 2013-2-8 22:25
标题: 关于用java实现杨辉三角问题的不同方法总结
本帖最后由 王文正 于 2013-2-8 22:28 编辑

前几天我在论坛上发帖子关于用用java实现杨辉三角的问题 很多高手给出不同的方法 我反复运行了之后 总结出三种不同的方法分别是:二维数组法、推导式法、递归法。做事要有始有终,今天把我这两天运行总结的三种方法,每一种都是我运行成功后的代码,与大家一起分享,也算给大家一个交代,望大家一起进步,为梦想而奋斗,早日成为黑马人!
原帖题目如下:在数学上很多人在研究杨辉三角,其实杨辉三角最难实现的部分是下部分中间数字是上面数字之和
如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 1
第一种:利用二维数组来实现
public class Triangle01 {

public static void main(String[] args) {

/*添加输入你要计算的行数*/
int num;
System.out.println("请输入你想计算的行数:");
Scanner scanner = new Scanner(System.in);
num=scanner.nextInt();

int b[][]=new int[num][num];

for(int j=0;j<num;j++){ //定义行数

for(int k=0;k<=j;k++){ //定义每一行的元素

if(j==0||k==0||k==j){ //先得到两边为1的元素

b[j][k]=1;

}else{ //计算中间不为1的元素

b[j][k]=b[j-1][k-1]+b[j-1][k];//计算值

}
}
}

for(int m=0;m<num;m++){

System.out.println(); //换行

for(int n=0;n<=m;n++){

System.out.print(b
[n]+"\t");//循环输出
}

}

}

}


第二种:利用推导式来实现
public class Triangle02 {

public static void main(String[] args) {

int i,j,k,n;
System.out.println("请输入您要计算的行数:");
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();

for(i=1;i<=n;i++){ //行数i

k=1; //因为每一行都是以1开头

for(j=1;j<=i;j++){ //每行的元素位置j

System.out.print(k+"\t");

//下面这个就是杨辉三角中的推导式
k=k*(i-j)/j; //每行的某个数值跟他行数和位置有关
//k=k*(i-j)/j;就是根据排列组合c(n,x)的值推导出来的

}

System.out.println();

}

}
}


第三种:递归法:
public class Triangle03 {

public static void main(String[] args) {

int n;
System.out.println("请输入要输出的杨辉三角的行数:");
Scanner scanner = new Scanner(System.in);
n=scanner.nextInt();
output(n);

}

static void output(int n){ //输出杨辉三角
int i,j;
for(i=0;i<=n;i++){ //表示行数

for(j=0;j<=i;j++){ //表示每行的第几个元素

System.out.print(get(i,j)+"\t");
}

System.out.println();
}
}

static int get(int i,int j){//的到每一个元素的值
if (j==0||i==j){
return 1;
}
else{

return get(i-1,j-1)+get(i-1,j); //调用自身

}
}

}


当然也有高手给出一下这种方法我认为也很不错,大家可以看一下,程序如下
public class Yangsan

{

public static void main(String args[])

{



Scanner sc = new Scanner(System.in);

System.out.print("请输入你想计算的行数:");

int x = sc.nextInt();

int arr[][] = new int[x][];

input(arr,x);//存入

print(arr);//输出

}

static void input(int[][] arr,int x)

{

for(int row=0;row<x;row++)

{

arr[row] = new int[row+1];

for(int list=0;list<=row;list++)

{

arr[row]
作者: xueying123    时间: 2013-2-10 20:35
我是潘姬,好文共赏,我只是路过!!











冲锋衣品牌 什么牌子防辐射服好  电热水龙头价格 电子血压计什么牌子好



足浴盆哪个牌子好 http://news.39.net/a/130104/4107435.html



剃须刀哪个牌子的好 http://news.china.com/news100/11038989/20130116/17635963.html



移动电源哪个牌子好 http://news.china.com/news100/11038989/20120517/17201579.html



电子血压计品牌 http://news.china.com/news100/11038989/20130110/17625924.html


防辐射服哪个牌子好 http://news.china.com/news100/11038989/20121217/17584135.html


眼霜排行榜 http://roll.sohu.com/20121228/n361910908.shtml

汽车导航仪价格 http://www.chinadaily.com.cn/hqcj/2013-01/30/content_16187373.htm

祛痘产品排行榜10强 http://news.163.com/12/0619/15/84CG94EN0001125P.html

移动电源什么牌子好 http://www.chinadaily.com.cn/hqcj/2013-01/18/content_16140273.htm
孕妇防辐射服品牌 http://www.chinadaily.com.cn/hqcj/2012-12/31/content_16072380.htm

作者: 月下孤舟    时间: 2013-2-13 01:12
你写程序都不加注释的?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2