精华内容
下载资源
问答
  • Java实现 蓝桥杯 算法训练 递归求二项式系数
    万次阅读 多人点赞
    2019-06-12 18:34:55

    算法训练 6-1 递归求二项式系数值
    时间限制:10.0s 内存限制:256.0MB
    问题描述

    样例输入
    一个满足题目要求的输入范例。
    3 10
    样例输出
    与上面的样例输入对应的输出。

    数据规模和约定
      输入数据中每一个数的范围。
      例:结果在int表示时不会溢出。

    import java.util.Scanner;
    
    
    public class 递归求二项式系数 {
    	public static void main(String[] args) {
    	    Scanner in = new Scanner(System.in);
    	    int k = in.nextInt();
    	    int n = in.nextInt();
    	    System.out.print(suan(k,n));
    	}
    
    	private static int suan(int k, int n) {
    	    if(k==0||k==n)
    	    {
    	        return 1;
    	    }
    	    else
    	    {
    	        return suan(k,n-1)+suan(k-1,n-1);
    	    }
    	}
    
    }
    
    
    更多相关内容
  • Java实现蓝桥杯二项式的系数规律

    万次阅读 多人点赞 2019-07-20 18:36:35
    二项式的系数规律,我国数学家很早就发现了。 如【图1.png】,我国南宋数学家杨辉1261年所著的《详解九章算法》一书里就出现了。 其排列规律: 1 1 1 2 1 3 3 1 4 6 4 1 5 10 10 5 1 6 15 20 15 6 1 7 21 .....

    二项式的系数规律,我国数学家很早就发现了。

    如【图1.png】,我国南宋数学家杨辉1261年所著的《详解九章算法》一书里就出现了。

    其排列规律:

       1
       1   1
       2    1
       3    3    1
       4    6    4    1
       5    10   10   5    1
       6    15   20   15   6    1
       7    21   35   35   21   7    1
    

    如下的程序,用来建立N行的杨辉三角形。请填写划线部分缺少的代码。

    注意:只填写划线部分的代码,不要填写任何多余的内容。

    public class A
    {
        public static void main(String[] args)
        {
            int N = 8;
            int[][] a = new int[N][N] ;
            
            for(int i=0; i<N; i++){
                a[i][0] = 1;
                a[i][i] = 1;
            }
            
            for(int i=1; i<N; i++){
                for(int j=1; j<i; j++) _____________________________;  //填空
            }
            
            for(int i=0; i<N; i++){
                for(int j=0; j<=i; j++)    System.out.print(String.format("%-5d", a[i][j]));
                System.out.println();
            }    
        }
    }
    
    
    
    答案:a[i][j] = a[i - 1][j - 1] + a[i - 1][j]
    
    展开全文
  • 05二项式系数Cnk.md

    千次阅读 2020-05-17 09:11:12
    一个简单的动态规划,配合二项式系数和杨辉三角。 CNK=CN−1K−1+CN−1K C_N^K=C_{N-1}^{K-1}+C_{N-1}^K CNK​=CN−1K−1​+CN−1K​ #include<iostream> #include<vector> using namespace std; int ...

    一个简单的动态规划,配合二项式系数和杨辉三角。
    C N K = C N − 1 K − 1 + C N − 1 K C_N^K=C_{N-1}^{K-1}+C_{N-1}^K CNK=CN1K1+CN1K

    #include<iostream>
    #include<vector>
    using namespace std;
     
    int Cnk(int n, int k)
    {
        vector<vector<int>>c;
        vector<int>c2;
        c2.push_back(1);
        c.push_back(c2);
        c2.push_back(1);
        c.push_back(c2);
        for(int i=2;i<n+1;i++)
        {
            vector<int>c1;
            c1.push_back(1);
            for(int j=1;j<i;++j)
            {
                int x=c[i-1][j-1]+c[i-1][j];
                c1.push_back(x);
            }
            c1.push_back(1);
            c.push_back(c1);
        }
        return c[n][k];
    }
     
    int main(void)
    {
        int n,k;
        cin>>n>>k;
     
        cout<<Cnk(n,k)<<endl;;
        return -1;
    }
    
    展开全文
  • 二项式定理(Java实现及代码重审)

    千次阅读 2011-04-22 17:33:00
    在上一篇文章中,我总结了从阅读《编程珠玑I》中获得的一些启示。... 作为代码重审和回顾的一个例子,我对以前的一个粗糙的二项式定理实现进行了重审和改写。当时,主要是为了学习动态规划法技术,运

     

     

               在上一篇文章中,我总结了从阅读《编程珠玑I》中获得的一些启示。其中有非常重要的一条:代码重审和回顾。通过对以前写过的代码进行重新审视和改进(以现在的经验),使之更具实用性从而学习新的东西。你敢于面对以前写过的代码吗?如果你都不敢面对,谁能有这个勇气?

               作为代码重审和回顾的一个例子,我对前的一个粗糙的二项式定理实现进行了重审和改写。当时,主要是为了学习动态规划法技术,运用来计算二项式系数。

     

                简单回顾二项式定理的相关知识:

               (a+b)^n= a^n + C(n,1)a^(n-1)b+...+C(n,k)a^(n-k)b^k +...+ C(n,n-1)ab^(n-1) +b^n

               其中: C(n,0)= C(n,n) = 1; C(n,k) = C(n, n-k); C(n,k)= C(n-1, k-1) + C(n-1,k)

     

               计算方法: 例如C(4,2)

                S1:构造数组: a[0:4][0:4]= 0

                S2:a[0][0] = 1;

                S3:a[1][0] = 1; a[1][1] = 1;

                S4:a[2][0] = 1; a[2][1] = 2; a[2][2] = 1

                S5:a[3][0] = 1; a[3][1] = 3; a[3][2] = 3; a[3][3] = 1

                S6:a[4][0] = 1; a[4][1] = 4; a[4][2] = 6

                如上所示,自上向下运用公式计算即可得到a[4][2] = 6.动态规划法通过保存并重用已经计算的值,从而避免不必要的计算时间,提高运行时间效率;其代价是一定的空间效率。这里,空间效率是O(n^2);后面可以看到,通过重用空间,空间效率可以降低到O(n)(否则,很快就内存不足了)。

     

               如何改写呢?首先要定义好类的接口和功能。对于该二项式类BinomialTheorem(命名要贴切,英文不知道如何拼写?搜索!)

              1.提供唯一参数为 二项式的幂 ,通过公共构造器传入;

              2.显示该二项式展开式的字符串表示。

                这里,仅仅只留出两个公共接口。简单的接口可使类更易使用;此外,在改写的过程中,发现要提供一个计算组合系数C(n,k)的便利方法。

     

                改进的几个方面:

     

                [1] 将其改为值对象。值对象是状态不可变的对象;对于同样的值应当返回同一个实例。值对象需要覆写equals hashCode方法;而如何使得对于同一个值参数返回同一个实例呢?参考Integer.ValueOf()实现,定义了一个内部嵌套类BinoTheoremCache,存放256个缓存BinomialTheorem对象。若取BinomialTheorem(i), 0<=i < 256 , 那么,直接从缓存中取;否则,使用 new来获取。这也说明一点:如果不太清楚某某怎么实现的,可以参考JDK源码来获取思路和启示。

     

                 [2]大整数: 计算到 C(60,30) 就发现整型不够用了。n= 60 就无法获得正确结果,这个类是毫无用处的。必须使用大整数;这里直接使用了java提供的 BigInteger. 具体实现是如何呢?留待以后推敲。这里仅仅给出猜想:应该是用整型数组拼接而成。int i可以表示 2147483647; 那么 int[]arr = new int[2] ; arr 可以表示到21474836472147483647这么大的数(转换为字符串形式)每个整数用一个整型数组表示显然浪费空间;那么可以分段表示:若 i<= 2147483647 , 则用含一个整数的数组表示; 若 2147483647< I <= 21474836472147483647;则用含两个整数的数组表示。依次类推。接下来就需要实现数组的加法、减法、乘法等。

     

                [3]空间效率: 如果采用初始的a[0:n][0:n]那么,其空间效率是O(n^2);当 n= 10000 时;int[0:10000][0:10000]需要 10000*10000*4/1024/1024= 381.47MB 空间;对于n= 100000 就无能为力;因此,如果总是囿于小数据处理,那么,会有一种“取之不尽,用之不竭”的错觉;一旦深入到大数据集的处理领域,就不得不经常面对JavaOutOfMemoryError 了。

     

                 如何改进其空间效率呢?思路是直观的:重用空间。可以发现A. 考虑到对称性,C(n,k)= C(n, n-k) , 实际上只需要a[0:n][0:n/2]; B. 当矩阵a[j-1][i]用来计算 a[j][i] i = 0,1,..., n/2 ; 1 <=j <= n之后, a[j-1][i]便不再起作用;因此,可以重用a[j-1][i], i= 0,1,..., n/2 的空间; 于是,只需要a[0:1][0:n/2]就可以了; 进一步地, 可以只需要a[0:n/2]空间 ,不过必须要倒着计算:

     

                假设a[0: 2] 存储着C(4,0) , C(4,1), C(4,2) ; 即:

                a[0]= C(4,0), a[1] = C(4,1) , a[2] = C(4,2) ;

                S1:a[2] = C(5,2) = 2C(4,2) = 2 *a[2];

                S2:a[1] = C(5,1) = C(4,0) + C(4,1) = a[0] + a[1];

                S3:a[0] = C(5,0) = 1;

     

                 如果顺着计算,会产生覆盖

                S1a[0] = C(5,0) =1;

                S2a[1] = C(5,1) =C(4,0) +C(4,1)

                S3: a[2] = C(5,2) = 2C(4,1) //! a[1]已被覆盖为C(5,1)

                这里实际上说明了一个比较普遍的现象:虽然动态规划法通常牺牲一定的空间来换取时间效率;但空间效率通常是有一定的提升和优化的空间的。

     

               [4] 一个简单的运行时间测量框架

                测量方法运行时间是一个较为频繁的操作,尤其是当实现一定的算法,并期望知道其性能的时候。通过写一个比较简单的运行时间测量框架,可以方便以后的算法性能测量应用。目前还只能接受单个问题规模参数的测试。这与程序测试等其实都是一本万利的事情。最初,可能觉得麻烦,一段时间熟悉后,当你掌握相关方法和技术后,开发速度就自然提上去了。熟能生巧

     

                [5]小结:

                不得不说,在这个代码重审和改进的过程中,确实学到了不少东西,也体验到了不断精益求精的一些感受,很好很充实。一个类,要写好可不容易!当然,改写后的最终程序并不一定就有多完善,不过,实用性是有很大提升的。程序中有不足之处,恳请读者指正。

     

               Java 代码实现:

     

               BinomialTheorem.java

     

               

     

              一个简单的运行时间测试框架   RuntimeMeasurement.java

     

             

     

              BinomialTheorem 测试类 : BinomialTest.java

     

             

     

     

    展开全文
  • 计算机等级考试--Java的知识点大全

    万次阅读 多人点赞 2019-03-16 20:42:59
    算法不等于程序,也不等于计算方法。 2、算法的基本特征: 1)确定性,算法中每一步骤都必须有明确定义,不允许有多义性; 2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止; 3)可行性,...
  • 动态规划 计算二项式系数

    千次阅读 2013-10-09 00:28:16
    动态规划计算二项式系数,主要用到了一个性质C(m,n)=C(m,n-1)+C(m-1,n-1); 这个式子将C(m , n)的计算问题表述为了(问题描述)C(m-1 , n -1)和C(m -1,n)两个较小的交叠子问题。 初始条件:C(m , m) ...
  • 样例输入 ...思路:仔细观察子,递归的的写法它已经告诉你了!! import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(Sy...
  • 计算机Java考试笔记

    千次阅读 多人点赞 2019-03-11 10:45:49
    有序线性表的长度为n,则有序线性表中分查找,最坏情况下的比较数为log2^n 2、教务管理系统为应用软件 3、软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误 程序调试的任务是诊断和改正...
  • 动态规划——1 计算二项式系数

    千次阅读 2014-01-21 12:41:33
    /** * 计算二项式系数 * 动态规划 * O(nk) * * @author chenxuegui * */ public class BinomialCoefficient {
  • 当你看到这篇文章的时候,相信自己已经在考试的路上,或者即将踏入计算机级考试的道路。先收藏为敬。再网上看了很多的java面试题,有很多都是零零碎碎的,有或者是需要付费加密????的,加个vip什么的,故而以下是...
  • 例如:计算 C( n , k ) ,  代码如下:   function y = Binomial( n , k ) %UNTITLED Summary of this function goes here % Detailed explanation goes here c = [ ] ;  for i = 1 : n
  • 递归求二项式系数值

    千次阅读 2016-11-30 22:09:34
    算法训练 6-1 递归求二项式系数值 样例输入 一个满足题目要求的输入范例。 3 10 样例输出 与上面的样例输入对应的输出。 数据规模和约定  输入数据中每一个数的范围。  例:结果在int表示时不会溢出。...
  • package ... import java.util.Scanner; public class 杨辉三角形与二项式定理递推 { static Scanner cin = new Scanner(System.in); static int C[][] = new int[1 ][1 ]; public static void
  • 算法趣谈--二项式展开

    千次阅读 2018-09-11 16:06:57
    import java.io.IOException; import java.util.Scanner; public class Yanghuisanjiao { static int a; static int b; static int power; static class Term{ int power_a; int po...
  • 蓝桥杯-递归求二项式系数值(java

    千次阅读 2017-04-02 17:13:33
    算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例。 3 10 样例输出 与上面的样例输入对应的输出。 数据规模和约定
  • Java全国计算机等级考试级笔记---公共知识部分

    千次阅读 多人点赞 2018-09-16 17:20:50
    Java全国计算机级笔记 ———公共知识部分 作者 :arsoooo 本内容供要参加java全国级计算机等级考试的参考 这是我初学java时做题总结的,会有自己乱总结出来的不普遍的结论或者错误的地方,...
  • 二项分布: 定义:n个独立的是/非试验中成功次数k的离散概率分布,每次实验成功的概率为p,记作B(n,p,k)。 概率公式:P(ξ=K)= C(n,k) * p^k * (1-p)^(n-k) 其中C(n, k) = (n-k) !/(k! * (n-k)!),记作ξ~B(n,p),...
  • Java分析并实现一个完整的二项队列
  • 算法训练 6-1 递归求二项式系数值

    千次阅读 2017-01-30 22:40:25
    问题描述 样例输入 一个满足题目要求的输入范例。 3 10 样例输出 与上面的样例输入对应的输出。...package 递归求二项式系数值;import java.util.Scanner;public class Main { public static int Combinatio
  • Java计算组合数以及生成组合排列

    万次阅读 多人点赞 2018-11-24 00:28:29
    组合数计算 公式法 逐个相除法(错误) 逐个相除法修正版 素数幂乘法 基本公式法 平方差连乘法 组合恒等法 简单递归法 杨辉三角法 杨辉三角优化法 进制法 组合数计算小结 获取数组的组合排列 进制法...
  • 首先,我们分析这道题,从一个8一直加到十个8,肯定要考虑到最后获取值的取值范围而long类型的最大值为9223372036854775807,很明显求十个8的范围超出了long类型的范围。 检测代码如下所示: public static void...
  • 计算机java开发实习周记20篇

    千次阅读 2021-02-27 08:25:59
    从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 传统J2EE应用的开发效率低,Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如...
  • Java 基础高频面试题(2021年最新版)

    万次阅读 多人点赞 2021-03-31 23:39:26
    最新 Java 基础高频面试题
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    文章目录Java 基础Head First JavaJava 核心技术卷一Java 编程思想设计模式Head First 设计模式图解设计模式设计模式重学 Java 设计模式Java 进阶Java 并发编程实战Java 并发编程艺术Java 并发编程之美图解Java多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 130,775
精华内容 52,310
关键字:

java怎么计算二项式

java 订阅