作业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.实验结果截图