目录
问题陈述
示例示例1
Explanation
解释
示例例子2
方法一:递归二项式展开
伪代码
示例:C++实现
输出
方法 2:迭代二项式展开
结论
首页 后端开发 C++ 编写一个程序来打印二项式展开系列

编写一个程序来打印二项式展开系列

Sep 18, 2023 pm 05:53 PM
程序 打印 二项式展开

编写一个程序来打印二项式展开系列

二项展开式是一个数学公式,用于展开 (a+b)^n 形式的表达式,其中 n 是正整数,a 和 b 可以是任何实数或复数。展开式给出了展开式中各项的系数。

一个二项式展开可以表示为

$$mathrm{(a+b)^n= ^nC_0a^nb^0+ ^nC_1a^{n-1}b^1 + ^nCa^{n-2}b^2+... + ^nC_ra^{n-r}b^r+...+ ^nC_na^0b^n}$$

其中 $mathrm{^nC_r}$ 是二项式系数,由下式给出

$mathrm{^nC_r=frac{n!}{r!times(n−r)!}}$,其中n!表示n的阶乘

展开式可用于使用上述公式计算所有二项式项并将其代入展开式方程。

问题陈述

给定三个整数 a、b 和 n。求 (a+b)^n 的二项展开式的项。

示例示例1

输入 -

a = 1, b = 2, n = 3
登录后复制

输出 -

[1, 6, 12, 8]
登录后复制

Explanation

的中文翻译为:

解释

二项式展开式(1+2)^3如下所示

$mathrm{(1+2)^3 = C(3,0)a^3b^0 + C(3,1)a^2b^1 + C(3,2)a^1b^2 + C(3,3)a^0b^3}$

= 1*1*1 + 3*1*2 + 3*1*4 + 1*1*8

因此,[1, 6, 12, 8] 是二项式展开的项。

示例例子2

输入 -

a = 7, b = 2, n = 11
登录后复制

输出 -

[2401, 2744, 1176, 224, 16]
登录后复制

方法一:递归二项式展开

使用二项式展开公式,

$$mathrm{(a+b)^n= ^nC_0a^nb^0+ ^nC_1a^{n-1}b^1 + ^nCa^{n-2}b^2+... + ^nC_ra^{n-r}b^r+...+ ^nC_na^0b^n}$$

我们可以通过递归计算二项式系数来找到每一项的值。

伪代码

procedure binomialCoeff (n, r)
   if r == 0 or r == n
      ans = 1
   else
      ans = binomialCoeff (n - 1, r - 1) + binomialCoeff (n - 1, r)
end procedure

procedure binomialTerms (a, b, n)
   Initialize vector: arr
   for r = 0 to n
      coeff = binomialCoeff(n, r)
      term = coeff + a^n-r + b^r
      add the term to arr
   ans = arr
end procedure
登录后复制

示例:C++实现

在下面的程序中,binomialCoeff()函数递归地计算第r个二项式系数的值,而binomialTerms()函数计算展开式中二项式项的值。

#include <bits/stdc++.h>
using namespace std;
// Function for calculating binomial coefficients
int binomialCoeff(int n, int r){
   if (r == 0 || r == n) {
      return 1;
   } else {
      return binomialCoeff(n - 1, r - 1) + binomialCoeff(n - 1, r);
   }
}

// Function for calculating the binomial terms
vector<int> binomialTerms(int a, int b, int n){
   vector<int> ans;
   for (int r = 0; r <= n; r++) {
   
      // Calculate the rth binomial coefficients
      int coeff = binomialCoeff(n, r);
      
      // Calculate the rth binomial expansion term
      int term = coeff * pow(a, n - r) * pow(b, r);
      ans.push_back(term);
   }
   return ans;
}
int main(){
   int a = 2, b = 3, n = 4;
   vector<int> res = binomialTerms(a, b, n);
   cout << "The binomial terms are : ";
   for (int i = 0; i < res.size(); i++) {
      cout << res[i] << " ";
   }
   return 0;
}
登录后复制

输出

The binomial terms are : 16 96 216 216 81
登录后复制
登录后复制

时间复杂度 - O(2^n),其中由于递归树和 binomialTerms() 中的 2^n 个节点,binomialCoeff() 函数的时间复杂度为 O(2^n)由于嵌套循环调用 binomialCoeff() n+1 次,函数的复杂度为 O(n^2)。因此总体复杂度为 O(2^n)。

空间复杂度 - 由于递归调用栈,空间复杂度为O(n)。

方法 2:迭代二项式展开

使用二项式展开公式,

$$mathrm{(a+b)^n= ^nC_0a^nb^0+ ^nC_1a^{n-1}b^1 + ^nCa^{n-2}b^2+... + ^nC_ra^{n-r}b^r+...+ ^nC_na^0b^n}$$

我们可以通过结合迭代和除法来找到这个展开式的每一项的值。

我们将创建 2 个函数,其中第一个函数计算二项式系数,第二个函数将 a 和 b 的幂相乘以获得所需的二项式项。

伪代码

procedure binomialCoeff (n, r)
   res = 1
   if r > n - r
      r = n - r
   end if
   for i = 0 to r-1
      res = res * (n - i)
      res = res / (i + 1)
   ans = res
end procedure

procedure binomialTerms (a, b, n)
   Initialize vector: arr
   for r = 0 to n
      coeff = binomialCoeff(n, r)
      term = coeff + a^n-r + b^r
      add the term to arr
   ans = arr
end procedure
登录后复制

示例:C++实现

在下面的程序中,binomialCoeff() 函数计算第 r 个二项式系数,而 binomialTerms() 函数计算给定 a、b 和 n 的二项式展开的所有项。

#include <bits/stdc++.h>
using namespace std;
// Function for calculating binomial coefficients
int binomialCoeff(int n, int r){
   int res = 1;
   if (r > n - r)  {
      r = n - r;
   }
   for (int i = 0; i < r; i++) {
      res *= (n - i);
      res /= (i + 1);
   }
   return res;
}

// Function for calculating the binomial terms
vector<int> binomialTerms(int a, int b, int n){
   vector<int> ans;
   for (int r = 0; r <= n; r++){
   
      // Calculate the rth binomial coefficients
      int coeff = binomialCoeff(n, r);
      
      // Calculate the rth binomial expansion term
      int term = coeff * pow(a, n - r) * pow(b, r);
      ans.push_back(term);
   }
   return ans;
}
int main(){
   int a = 2, b = 3, n = 4;
   vector<int> res = binomialTerms(a, b, n);
   cout << "The binomial terms are : ";
   for (int i = 0; i < res.size(); i++){
      cout << res[i] << " ";
   }
   return 0;
}
登录后复制

输出

The binomial terms are : 16 96 216 216 81
登录后复制
登录后复制

时间复杂度 - O(n^2),其中 binomialCoeff() 函数的时间复杂度为 O(r),其中 r 是 r 和 n-r 中较小的数字以及 binomialTerms() 函数由于嵌套循环调用 binomialCoeff() n+1 次,复杂度为 O(n^2)。因此总体复杂度为 O(n^2)。

空间复杂度 - 由于向量存储二项式项,所以为O(n)。

结论

总之,要找到二项式展开的二项式项,我们可以使用上述两种方法之一,时间复杂度范围从O(2^n)到O(n^2),其中迭代方法比递归方法更优化。

以上是编写一个程序来打印二项式展开系列的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在iPhone中使Google地图成为默认地图 如何在iPhone中使Google地图成为默认地图 Apr 17, 2024 pm 07:34 PM

iPhone上的默认地图是Apple专有的地理位置提供商“地图”。尽管地图越来越好,但它在美国以外的地区运行不佳。与谷歌地图相比,它没有什么可提供的。在本文中,我们讨论了使用Google地图成为iPhone上的默认地图的可行性步骤。如何在iPhone中使Google地图成为默认地图将Google地图设置为手机上的默认地图应用程序比您想象的要容易。请按照以下步骤操作–先决条件步骤–您必须在手机上安装Gmail。步骤1–打开AppStore。步骤2–搜索“Gmail”。步骤3–点击Gmail应用旁

excel打印表格框线消失怎么办 excel打印表格框线消失怎么办 Mar 21, 2024 am 09:50 AM

如果在打开一份需要打印的文件时,在打印预览里我们会发现表格框线不知为什么消失不见了,遇到这样的情况,我们就要及时进行处理,如果你的打印文件里也出现了此类的问题,那么就和小编一起来学习下边的课程吧:excel打印表格框线消失怎么办?1、打开一份需要打印的文件,如下图所示。  2、选中所有需要的内容区域,如下图所示。  3、单击鼠标右键,选择“设置单元格格式”选项,如下图所示。  4、点击窗口上方的“边框”选项,如下图所示。  5、在左侧的线条样式中选择细实线图样,如下图所示。  6、选择“外边框”

内存或磁盘空间不足,无法重新分页或打印此文档Word错误 内存或磁盘空间不足,无法重新分页或打印此文档Word错误 Feb 19, 2024 pm 07:15 PM

本文将介绍如何解决在MicrosoftWord中出现的内存或磁盘空间不足以重新分页或打印文档的问题。这种错误通常会在用户尝试打印Word文档时出现。如果您遇到类似的错误,请参考本文提供的建议进行解决。内存或磁盘空间不足,无法重新分页或打印此文档Word错误解决MicrosoftWord打印错误“没有足够内存或磁盘空间重新分页或打印文档”的方法。更新MicrosoftOffice关闭占用内存的应用程序更改您的默认打印机在安全模式下启动Word重命名NorMal.dotm文件将Word文件保存为另一

从 iPhone 打印的 4 种方法 从 iPhone 打印的 4 种方法 Feb 02, 2024 pm 04:10 PM

在这个数字化的世界中,打印页面的需求并没有消失。尽管您可能认为在计算机上保存内容并直接发送到打印机更为便捷,但是您同样可以在iPhone上完成相同的操作。通过iPhone的相机,您可以拍摄照片或文档,并且还可以直接存储文件以便随时打印。这样一来,您可以快速方便地将您所需的信息实体化,并将其保存在纸质文档中。无论是在工作中还是日常生活中,iPhone为您提供了一个便携式的打印解决方案。以下帖子将帮助您了解如果您希望使用iPhone在打印机上打印页面,您需要了解的所有信息。从iPhone打印:要求苹

在Windows 11/10中无法从截图工具打印 在Windows 11/10中无法从截图工具打印 Feb 19, 2024 am 11:39 AM

如果您在Windows11/10中无法使用截图工具进行打印,可能是由于系统文件损坏或驱动程序问题导致的。本文将为您提供解决此问题的方法。在Windows11/10中无法从截图工具打印如果您无法从Windows11/10中的SnippingTool打印,请使用这些修复程序:重新启动PC打印机清除打印队列更新打印机和显卡驱动程序修复或重置剪裁工具运行SFC和DISM扫描使用PowerShell命令卸载并重新安装截图工具。我们开始吧。1]重新启动您的PC和打印机重新启动电脑和打印机有助于消除暂时的故障

如何在Windows 11中暂停打印 如何在Windows 11中暂停打印 Feb 19, 2024 am 11:50 AM

错误地打印了一个大文件?需要停止或暂停打印以节省墨水和纸张吗?在许多情况下,您可能需要暂停Windows11设备上正在进行的打印作业。如何在Windows11中暂停打印?在Windows11中,暂停打印会暂停打印作业,但并不会取消打印任务。这为用户提供了更灵活的控制权。有三种方法可以实现这一点:使用任务栏暂停打印使用Windows设置暂停打印使用控制面板打印现在,让我们来详细看看这些。1]使用任务栏打印右键单击任务栏上的打印队列通知。单击打开所有活动打印机选项。在这里,右击打印作业并选择全部暂停

如何通过C++编写一个简单的倒计时程序? 如何通过C++编写一个简单的倒计时程序? Nov 03, 2023 pm 01:39 PM

C++是一种广泛使用的编程语言,在编写倒计时程序方面非常方便和实用。倒计时程序是一种常见的应用,它能为我们提供非常精确的时间计算和倒计时功能。本文将介绍如何使用C++编写一个简单的倒计时程序。实现倒计时程序的关键就是使用计时器来计算时间的流逝。在C++中,我们可以使用time.h头文件中的函数来实现计时器的功能。下面是一个简单的倒计时程序的代码

Word邮件合并打印空白页 Word邮件合并打印空白页 Feb 19, 2024 pm 04:51 PM

如果您发现在使用Word打印邮件合并文档时出现空白页,这篇文章将对您有所帮助。邮件合并是一项便捷的功能,让您能够轻松创建个性化文档并发送给多个收件人。在MicrosoftWord中,邮件合并功能备受推崇,因为它能够帮助用户节省手动为每个收件人复制相同内容的时间。为了打印邮件合并文档,您可以转到邮件选项卡。但是一些Word用户反映,在尝试打印邮件合并文档时,打印机会打印空白页或根本不打印。这可能是由于格式设置不正确或打印机设置问题。尝试检查文档和打印机设置,确保打印前预览文档,以确保内容正确。如果

See all articles