所有从1到n中取出的组合的乘积之和

所有从1到n中取出的组合的乘积之和

如果从1到n逐个取数,可能会有多种组合

例如,如果我们一次只取一个数字,组合的数量将为 nC1。

If we take two numbers at a time, the number of combinations will be nC2. Hence, the total number of combinations will be nC1 + nC2 +… + nCn.

要找到所有组合的总和,我们必须使用一种高效的方法。否则,时间和空间复杂度会变得非常高。

Problem Statement

找出从1到N中每次取出的数字的所有组合的乘积之和。

N is a given number.

示例

输入

N = 4

登录后复制

Output

f(1) = 10f(2) = 35f(3) = 50f(4) = 24

登录后复制

Explanation

f(x) is the sum of the product of all combinations taken x at a time.f(1) = 1 + 2+ 3+ 4 = 10f(2) = (1*2) + (1*3) + (1*4) + (2*3) + (2*4) + (3*4) = 35f(3) = (1*2*3) + (1*2*4) +(1*3*4) + (2*3*4) = 50f(4) = (1*2*3*4) = 24 

登录后复制

输入

N = 5

登录后复制

Output

f(1) = 15f(2) = 85f(3) = 225f(4) = 274f(5) = 120

登录后复制

Brute Force Approach

暴力法是通过递归生成所有组合,找出它们的乘积,然后找到相应的和。

递归C++程序示例

下面是一个递归的C++程序,用于找到所有组合中(从1到N)每次取的乘积的和

#include using namespace std;//sum of each combinationint sum = 0;void create_combination(vectorvec, vectorcombinations, int n, int r, int depth, int index) {   // if we have reached sufficient depth   if (index == r) {      //find the product of the combination    int prod = 1;    for (int i = 0; i vec, int n) {   for (int i = 1; i combinations(i);    // call combination with r = i    // combination by taking i at a time    create_combination(vec, combinations, n, i, 0, 0);    // displaying sum of the product of combinations    cout vec(n);   // storing numbers from 1-N in the vector   for (int i = 0; i  

Output

f(1) = 15f(2) = 85f(3) = 225f(4) = 274f(5) = 120

登录后复制

By creating the recursion tree of this approach, it is visible that the time complexity is exponential. Also, many steps get repeated which makes the program redundant. Hence, it is highly inefficient.

Efficient Approach (Dynamic Programming)

An effective solution would be to use dynamic programming and remove the redundancies.

Dynamic programming is a technique in which a problem is divided into subproblems. The subproblems are solved, and their results are saved to avoid repetitions.

Example C++ Program using Dynamic Programming

Below is a C++ Program using Dynamic Programming to find the sum of all combinations taken (1 to N) at a time .

#include using namespace std;//Function to find the postfix sum arrayvoid postfix(int a[], int n) {for (int i = n - 1; i > 0; i--)   a[i - 1] = a[i - 1] + a[i];}//Function to store the previous results, so that the computations don't get repeatedvoid modify(int a[], int n) {   for (int i = 1; i  

Output

f(1) = 15f(2) = 85f(3) = 225f(4) = 274f(5) = 120

登录后复制

结论

在这篇文章中,我们讨论了找到从1到N中所有组合的乘积之和的问题。

我们从指数时间复杂度的暴力方法开始,然后使用动态规划进行了修改。同时还提供了两种方法的C++程序。

以上就是所有从1到n中取出的组合的乘积之和的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583389.html

(0)
上一篇 2025年3月6日 14:33:28
下一篇 2025年2月23日 23:58:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • C++以k个元素为一组,从n个元素中取r个元素的排列

    给定n、r、k,现在我们必须找出如何从n中选择r个物品,以便特定的k个物品总是一起出现,例如。 Input : n = 8, r = 5, k = 2Output : 960Input : n = 6, r = 2, k = 2Output…

    2025年3月6日
    200
  • 两两乘积之和

    集合X = {a, b, c}的成对乘积可以定义为所有可能的集合对乘积的和。集合的成对为Y = {a * a, a * b, a *c, b * b, b * c, c * c},其中乘积是可交换的。因此,集合X的成对乘积是集合Y的元素之和…

    2025年3月6日
    200
  • C++ 中什么时候应该使用继承,什么时候应该使用组合?

    在 c++++ 中,继承用于建立“是-一个”关系,强制执行接口一致性。而组合用于建立“包含-一个”关系,提供灵活性。继承:当子类与基类具有“是-一个”关系时使用,如车辆与汽车。组合:当容器类与组件类具有“包含-一个”关系时使用,如游戏中的角…

    2025年3月6日
    200
  • Python如何计算列表中所有数字的乘积?(代码示例)

    在python中如何将列表中所有数字相乘,然后返回乘积值。下面本篇文章就来给大家介绍三种将列表中的所有数字相乘、计算乘积值的方法,希望对大家有所帮助。 方法一:使用遍历 将变量product的值初始化为1(不为0为0乘以任何值返回零)。遍历…

    2025年3月5日
    200
  • Go 语言中的组合是怎样实现的?

    go语言中的组合是一种重要的代码复用机制,它允许一个对象通过将另一个对象嵌入到自身中来扩展自身的功能。这种机制不仅有助于提高代码的可重用性和可维护性,还能减轻开发人员面临的挑战。在本文中,我们将详细介绍go语言中的组合是怎么实现的,以及它的…

    编程技术 2025年3月2日
    200
  • 使用filepath.Join函数将多个路径片段组合成一个路径

    使用filepath.join函数将多个路径片段组合成一个路径 在Go语言的标准库中,有一个名为filepath的包,提供了一些用于操作文件路径的函数。其中,Join函数是一个非常有用的函数,可以将多个路径片段组合成一个路径。 filepa…

    编程技术 2025年3月2日
    200
  • Golang 函数链中如何实现组合?

    要在 go 函数链中实现组合,可以使用 compose() 函数将多个函数组合成一个新函数,新函数依次调用传递给 compose() 的函数,顺序是从右到左。这种技术可用于创建复杂的工作流并轻松地重用函数,例如下面的实战案例中组合函数以计算…

    2025年2月28日
    200
  • PyQt5每天必学之组合框

    这篇文章主要为大家详细介绍了pyqt5每天必学之组合框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 QComboBox 是一个允许用户从列表选项中选择一项的控件。 #!/usr/bin/python3# -*- coding: utf…

    2025年2月27日
    200
  • 如何解决Python的组合错误?

    python中的组合问题是指在给定一组元素的情况下,如何生成其所有可能的组合。这是在许多计算机科学应用程序中经常遇到的一个问题。python中有多种方法来解决这个问题,但是不正确的实现会导致组合错误。本文将介绍如何解决python中的组合错…

    编程技术 2025年2月26日
    200
  • Python中选择性元组键的乘积的产品

    Introduction 在Python中有不同类型的数据结构。元组是一种数据结构,它是一个有序的元素集合。元组也被称为不可变的。不可变基本上意味着一旦创建,元组就无法修改。在下面的文章中,我们将了解在Python中查找选择元组键的乘积的程…

    2025年2月26日
    200

发表回复

登录后才能评论