黑马程序员技术交流社区
标题:
关于用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]
= method(row,list);
}
}
}
static void print(int[][] arr)
{
for(int row =0;row<arr.length;row++)
{
for(int list=0;list<=row;list++)
System.out.print(arr[row]
+"\t");
System.out.println();
}
}
static int method(int row,int list)// 递归
{
if(list<=0||list>= row)
return 1;
return(method(row-1,list)+method(row-1,list-1));
}
}
作者:
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