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

  • 相关阅读:
    animation-fill-mode
    css3 media queries
    三列,左右两列宽度固定,中间宽度自适应
    两列布局,一列定宽,一列宽度自适应
    css3 animation
    transition和animation区别
    transform 和 transition
    弹出框样式
    python map和filter函数
    leetcode Z字形字符串
  • 原文地址:https://www.cnblogs.com/sunshine-z/p/7663371.html
Copyright © 2020-2023  润新知