博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
02方法 课后作业1
阅读量:4920 次
发布时间:2019-06-11

本文共 2029 字,大约阅读时间需要 6 分钟。

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、结果截图:

 

转载于:https://www.cnblogs.com/DaisyYuanyq/p/7663645.html

你可能感兴趣的文章
Android设计模式实战---责任链模式
查看>>
剑指Offer_31_整数中1出现的次数(从1到n整数中1出现的次数)
查看>>
10月29日 迅雷会员vip账号分享 91freevip 晚间21:00更新
查看>>
【一题多解】Python 字符串逆序
查看>>
open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
查看>>
字典(dictionary)与映射(map)
查看>>
Python 编程规范 —— TODO 注释(结合 PyCharm)
查看>>
十万个为什么 —— 名词解释(体育)
查看>>
table的设置(w3c)
查看>>
冲刺一
查看>>
【练习】在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b...
查看>>
python解决上楼梯问题
查看>>
变参宏 __VA_ARGS__
查看>>
sql 语句
查看>>
VUE一 基础语法
查看>>
[MySQl]MySQL忘记密码
查看>>
Android的minSdkVersion,targetSdkVersion,maxSdkVersion
查看>>
Xceed WinForm数据表格控件Xceed Grid For .NET控件详细介绍及下载地址
查看>>
ecos启动流程分析
查看>>
Oracle CASE WHEN 用法介绍
查看>>