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.程序结果截图

  • 相关阅读:
    python基础——dict和set(字典和集合)
    python基础——循环(for,while,break,continue)
    python基础——条件判断
    python基础——list和tuple(列表和元组)
    python基础——字符串、编码、格式化
    Linux 新建线程 简单使用
    Android 原始套接字
    QTextEdit/QPlainTextEdit 等_默认的滚动条_宽度调节
    494. Target Sum
    670. Maximum Swap
  • 原文地址:https://www.cnblogs.com/ggrm/p/7659093.html
Copyright © 2011-2022 走看看