本帖最后由 王文正 于 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));
}
}
|
|