课程作业01实验报告1,2,3

作业01

1.设计思路

先定义两个数n,k,用于输入下标n和上标k,然后定义大数据result,用于计算组合数的结果。定义一个calculateN函数,用大数据处理和递归计算n的阶乘,然后再在main()

调用calculateN计算n!,k!,(n-k)!,再用大数据处理计算n!/k!*(n-k)! =result,然后输出结果。

2.程序流程图

3.源程序

package 作业01;

import java.math.BigInteger;

import java.util.Scanner;

public class Work {

public static void main(String[] args) {

           // TODO Auto-generated method stub

           Scanner scanner=new Scanner(System.in);

           System.out.print("请输入n:");//显示输入n

           int    number=scanner.nextInt();//定义n

           System.out.print("请输入k:");//显示输入k

           int number1=scanner.nextInt();//定义k

           int number2=number-number1;//定义n-k

           BigInteger result;//定义大数据result

           System.out.println(number+"!="+calculateN(number));//调用函数计算并输出n!

           System.out.println(number1+"!="+calculateN(number1));//调用 函数计算并输出k!

           System.out.println(number+"-"+number1+"!="+calculateN(number2));//调用函数计并输出(n-k)!

           result=calculateN(number).

                             divide((calculateN(number1).multiply

                                                (calculateN(number2))));//用大数据处理计算n!/K!*(n-k)!

           System.out.println("Cnk="+result);//输出结果

}

public static BigInteger calculateN(int n)//递归计算n!的函数

{

           if(n==1 || n==0){

                    return BigInteger.valueOf(1);

           }

           return BigInteger.valueOf(n).

                             multiply(calculateN((n-1)));//递归调用计算n*(n-1),直到n=1或者n=0

          

}

}

4.实验截图

 

 

5.实验总结

学会了一写用大数据处理的方法,multiply和divide 函数的使用,对函数递归调用更加熟练了。

作业02

1.程序设计思路

定义n,k,用于输入上标和下标,定义数组显示和计算每个位置的数字,初始化最开始的几个值,以便后面的递推计算,用数组算出要求的组合数。

2.程序流程图

3.源程序

package 作业01;
import java.util.Scanner;
public class Work2 {
public static void main(String[] args) {
int i;//定义 i,j,n,k;
int j;
int n;
System.out.println("请输入n,k");
Scanner input=new Scanner(System.in);
n=input.nextInt();//输入n
int num[][]=new int[100][100];//定义足够大的二维数组
int k=input.nextInt();//输入k
num[0][0]=1;num[1][0]=1;num[1][1]=1;//先规定前几个1
for(i=2;i<=n;i++)//for循环从第二行开始
{ num[i][0]=1;//每一行第一个和最后一个都是1
num[i][i]=1;
for(j=1;j<=i;j++)//用for循环显示列的值
{
num[i][j]=num[i-1][j-1]+(num[i-1][j]);//用规律计算每个数

}

}
System.out.println("C(n)(k)="+num[n][k]);//输出结果
}

}

4.结果截图

5.实验总结

杨辉三角来求组合数,要注意先定义前几个a[0][0]a[1][0]a[1][1]为1,以便于后面的递推计算,而且,要从第二行开始,i-1不能等于0-0.

作业03

1.设计思路

设计一个ditui函数,利用 num[n][k]=digui(n-1,k)+digui(n-1,k-1);公式计算杨辉三角中的值。第二个实验中的for循环换成ditui函数的调用。

2.程序设计思路

3.源程序

package 作业01;

import java.util.Scanner;

public class Work3 {
public int num[][]=new int[100][100];
public static void main(String[] args) {
int n;
Work3 A=new Work3();
System.out.println("请输入n,k");
Scanner input=new Scanner(System.in);
n=input.nextInt();//输入n
int num[][]=new int[100][100];//定义足够大的二维数组
int k=input.nextInt();//输入k
num[0][0]=1;num[1][0]=1;num[1][1]=1;//先规定前几个1
num[n][k]=A.digui(n, k);
System.out.println("C(n)(k)="+num[n][k]);
}//输出结果


public int digui(int n,int k)//递归函数

{

if(k==n|| k==0){

return 1;

}

num[n][k]=digui(n-1,k)+digui(n-1,k-1);

return num[n][k];//返回值

}

}

4.实验结果截图

原文地址:https://www.cnblogs.com/sunshine-z/p/7663371.html