zoukankan      html  css  js  c++  java
  • 课下作业1-利用计算机计算组合数

    1.程序设计思想

    第一种用公式的方法求组合数,利用递归方法,求出阶乘,求出组合数的大小。

    第二种是用递推的方法,递推的方法是由前往后递推,利用杨辉三角形找出规律,利用二元数组求出组合数的大小。

    第三种是用递归函数的方法,由后往前调用递归公式,利用给出组合数公式,初始化值,求出组合数的大小

    2.程序流程图

    3.程序源代码

    第一种方法:

    //信1605-1 寇肖萌 20163446
    import java.util.Scanner;
    import java.lang.Math.*;
    import java.math.BigInteger;
    public class ZuheNumber{
    //组合数公式
    public static BigInteger jiecheng(int n)
    {

    if(n<0)
    {
    System.out.println("输入有误");
    }
    if(n==1||n==0)
    {
    return BigInteger.valueOf(1);
    }
    else
    {
    return BigInteger.valueOf(n).multiply(jiecheng((n-1)));
    }

    }
    public static long calculateN(int n) {
    if(n==1 || n==0){
    return 1;
    }

    return n*calculateN(n-1);
    }

    public static void main(String args[])
    {
    System.out.print("请输入组合数的n和k:");
    Scanner scanner1=new Scanner(System.in);//组合数的下标
    int n=scanner1.nextInt();
    Scanner scanner2=new Scanner(System.in);//组合数的上标
    int k=scanner2.nextInt();
    BigInteger x,y,z,d,result;
    x=jiecheng(n);
    y=jiecheng(k);
    z=jiecheng(n-k);
    d=y.multiply(z);//计算k!*(n-k)!的结果
    result=x.divide(d);//计算n!(k!*(n-k)!)的结果
    System.out.println("组合数的结果是:"+result);//输出运算结果

    }
    }

     第二种方法:

    //信1605-1 寇肖萌 20163446
    import java.util.Scanner;
    import java.lang.Math.*;
    public class ZuheNumber1 {
    public static int n;
    public static int k;
    public static int c[][]=new int[100][100];
    ZuheNumber a=new ZuheNumber();
    public static void main(String args[])
    {

    System.out.print("请输入组合数的n和k:");
    Scanner scanner1=new Scanner(System.in);//组合数的下标
    int n=scanner1.nextInt();
    Scanner scanner2=new Scanner(System.in);//组合数的上标
    int k=scanner2.nextInt();
    c[0][0]=1;//初始化
    c[1][0]=1;//初始化
    c[1][1]=1;//初始化
    for(int i=2;i<=n;i++)
    {
    c[i][0]=1;
    c[i][i]=1;//初始化每行 杨辉三角的两边的值
    for(int j=1;j<=i;j++)
    {
    c[i][j]=c[i-1][j-1]+c[i-1][j];
    }
    }

    System.out.println("组合数的结果是:"+c[n][k]);
    }
    }

     第三种方法:

    //信1605-1 寇肖萌 20163446

    import java.util.Scanner;
    public class ZuheNumber2 {
    public static int n;
    public static int k;
    public static int c[][]=new int[100][100];
    public static void main(String args[])
    {
    System.out.print("请输入组合数的n和k:");
    Scanner scanner1=new Scanner(System.in);//组合数的下标
    int n=scanner1.nextInt();
    Scanner scanner2=new Scanner(System.in);//组合数的上标
    int k=scanner2.nextInt();
    c[0][0]=1;//初始化
    c[1][0]=1;//初始化
    c[1][1]=1;//初始化
    System.out.println("组合数的结果是:"+digui(n,k));
    }
    public static int digui(int n0,int k0)
    {
    if((k0==n0)||(k0==0))
    {
    return 1;
    }
    c[n0][k0]=digui(n0-1,k0)+digui(n0-1,k0-1);
    return c[n0][k0];
    }
    }

    4.程序结果截图

  • 相关阅读:
    p3159 [CQOI2012]交换棋子
    三分法
    p2805 [NOI2009]植物大战僵尸
    p2604 [ZJOI2010]网络扩容
    p1129 [ZJOI2007]矩阵游戏
    有趣与愉快-------罗辑思维整理
    张小龙的书单
    会议
    使用CCProxy代理遇到的问题
    关于看书
  • 原文地址:https://www.cnblogs.com/ggrm/p/7659093.html
Copyright © 2011-2022 走看看