• 02方法 课后作业1


    1、设计思想:

             1、使用BigInteger,将所有值都设置为BigInteger型,用multiply表示*,用divide表示/;

             2、设计一个函数,用来实现递归计算n!;

             3、输入n,k,计算n!,k!,(n-k)!,C(n,k)的值

             4、设计杨辉三角形,定义一个二维数组num[][];num[i][j]=num[i-1][j-1]+num[i-1][j];

             5、设计一个函数,递归计算组合数,定义一个二维数组,C[k][n+1]=C[k-1][n]+C[k][n];

    2、程序流程图:

          1、递归计算n!的流程图

             

          2、计算杨辉三角形

     

         

    3、递归计算组合数

     

    3、程序源代码:

    import java.math.BigInteger;
    import java.util.Scanner;
    // 信1605-2 20163483 袁亚琴
    public class Compute {
     private int n;
     public static BigInteger fac(int n)//计算n的阶乘
     {
      
      if(n<0)
       System.out.println("n<0,date error");
      if(n==0||n==1)
       return BigInteger.valueOf(1); //返回值为1
      else
          return BigInteger.valueOf(n).multiply(fac(n-1));//返回n*(n-1),n不为0不为1则继续循环
      
     }
     public static void main(String[] args)
     {
      int  n=0,k=0;
      BigInteger x,y,z,m,l;
      /*Compute p1=new Compute();
      Compute p2=new Compute();
      Compute p3=new Compute();
      Compute p4=new Compute();
      Compute p5=new Compute();
             p1.fac(n);
             p2.fac(k);
             p3.fac(n-k);
             p4.fac(k-1);
             p5.fac(n-k+1);*/
             System.out.println("input an integer number(n):");
             Scanner input=new Scanner(System.in);
             n=input.nextInt();
             y=fac(n);//y=n!
             System.out.println(n+"!="+y);
             System.out.println("input another integer number(k):");
             k=input.nextInt();
             x=fac(k);//x=k!
             System.out.println(k+"!="+x);
             z=fac(n-k);//z=(n-k)!
             System.out.println("(n-k)!="+(n-k)+"!="+z);
             BigInteger C,C1,C2,res;
             res=x.multiply(z);
             C=y.divide(res);
             System.out.println("组合数C(n,k)=:"+C);
             m=fac(k-1);
             l=fac(n-k+1);
             res=m.multiply(l);
             C1=y.divide(res);
             C2=C.add(C1);
             System.out.println("组合数:C(n+1,k)=C(n,k-1)+C(n,k)="+C2);
             System.out.println("利用杨辉三角形计算组合数:C(n+1,k)=C(n,k-1)+C(n,k)");
             int w=100;
             int num[][]=new int[w][w];
             for(int i=0;i<w;i++)
             {
              for(int j=0;j<=i;j++)
              {
               if(j==0||i==j)
               {
                num[i][j]=1;//每行第一个数为1,当行数和列数相等时值为1
               }
               else
               {
                num[i][j]=num[i-1][j-1]+num[i-1][j];//第i行j列数的值为第i-1行j-1列的值+第i-1行j列的值
               }
              }
             }
             System.out.println("input an integer number(n):");
             n=input.nextInt();
             System.out.println("input another integer number(k):");
             k=input.nextInt();
             System.out.println("C(n+1,k)=C(n,k-1)+C(n,k)="+num[n][k]);
     }

    }

     4、结果截图:

  • 相关阅读:
    2015年蓝桥杯省赛A组c++第3题
    2015年蓝桥杯省赛A组c++第1题
    算法学竞赛常用头文件模板
    Android+Tomcat通过http获取本机服务器资源
    Ubuntu16.04LTS卸载软件的命令
    20个有趣的Linux命令
    Ubuntu16.04开机蓝屏问题解决
    Ubuntu启动时a start job is running for dev-disk-by延时解决
    Cookie与Session
    JS 闭包
  • 原文地址:https://www.cnblogs.com/DaisyYuanyq/p/7663645.html
Copyright © 2020-2023  润新知