组合(-)

关于Cm取n

    我们知道,用公式m!/(n!*(m-n)!)可以得到结果,用计算机计算可以用乘法递归得到结果,但若m较大时则无论怎样都会产生溢出。我写了一个程序可以得到m较大时的结果,结果用双长整形保留,也就是说结果仍然有限。

    这种方法的基本思想是采用杨辉三角的规律来做。杨辉三角与组合密切相关,它每一行的每一个数代表了(a + b)的n次方的系数,即Cm取n的结果。按照这个规律,用一个长度为m+1的数组保留杨辉三角的每一行的结果,先置0号元素为1,其余元素为0,从m+1行,m+1列开始从后往前加,即array[i] = array[i - 1] + arrar[i],这样就能得到第m行的杨辉三角数,然后直接取第n号元素即为结果,下面是代码:



#include <iostream>
using namespace std;

/*用双长整形保存扬辉三角数,将在第67行溢出*/
int get_yanghui(long long int* arr, int m)
{
	int i = 1, j = 0;
	long long temp = 0;
	for(j = 1; j < m + 1; j++)	
		for(i = j; i > 0; i --)
		{
			temp = *(arr + i - 1) + *(arr + i);
			if(temp < 0)
				return -1;
			*(arr + i) =  temp;
		}
	return 0;
}


long long solve(long long int *arr, int m, int n)
{
	*arr = 1;
	if(get_yanghui(arr, m) == 0)
		return *(arr + n);
	else
		return -1;
}


int main()
{

	long long resu = 1;
	int m = 0, n = 0;
	cin >> m >> n;
	long long int* arr = new long long int[m + 1];
	memset(arr, 0, sizeof(long long int) * (m + 1));

	cout << solve(arr, m, n) << endl;
	system("pause");

	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对象组合是面向对象编程中的一种设计模式,它允许一个对象包含其他对象作为其成员变量,并且可以调用这些成员对象的方法和属性。通过对象组合,我们可以将复杂的问题分解成更小的问题,每个小问题都由一个对象来解决。 对象组合可以通过多种方式实现。其中一种常见的方式是将成员对象作为构造函数的参数传递给包含对象,并在包含对象中保存对这些成员对象的引用。另一种方式是使用属性或setter方法,将成员对象动态地注入到包含对象中。 对象组合可以帮助我们实现更具可重用性和可维护性的代码。通过将功能分解成小的对象,我们可以更容易地测试和调试代码,同时也可以减少代码的耦合性,使得代码更容易扩展和修改。 ### 回答2: 6-2 对象组合-2021 是指在2021年对对象的组合进行的一项工作或研究。在计算机编程中,对象组合是一种将不同的对象结合在一起形成新的对象的技术或模式。通过对象组合,可以更灵活和高效地构建和管理复杂的系统。 在2021年,对象组合的应用得到了广泛的关注和应用。有许多具体的应用场景和实例可以考虑。例如,可以将不同的数据对象组合成一个更大的数据结构,以实现更高级的数据操作和分析。又如,可以将不同的功能对象组合成一个更复杂的系统,以满足不同的业务需求。此外,还可以通过对象组合来实现代码的重用和模块化,提高开发效率和质量。 具体而言,对象组合可以通过不同的技术和模式来实现。常见的方式包括组合模式、装饰器模式、依赖注入等。通过这些方式,可以将不同的对象组合在一起,形成一个整体的对象。在组合过程中,可以灵活地添加、删除或替换对象,以满足不同的需求和变化。 总之,6-2 对象组合-2021 是指在2021年对对象组合技术的应用和研究。通过对象组合,可以更灵活和高效地构建和管理复杂的系统。对象组合可以应用于不同的领域和场景,提供了一种强大的工具和方法,用于解决实际问题。 ### 回答3: 6-2 对象组合-2021 是指在2021年进行的关于对象组合的学习或实践活动。对象组合是指将不同的对象组合在一起形成一个新的对象或实体的过程。 在对象组合-2021中,我可以想象参与者会进行一系列的学习和实践活动来加深对对象组合的理解和应用。首先,参与者可能会学习对象组合的基本概念和原理,了解如何通过组合已有的对象来创建新的对象。他们可能会研究各种对象组合的实际应用,包括软件开发中的面向对象编程、系统设计中的模块化设计等。 参与者还可以在对象组合-2021中参与实践项目,通过实际动手操作来巩固所学的知识。例如,他们可以参与一个小组项目,在其中将多个对象组合在一起创建一个新的功能或系统。这个项目可以是一个简单的软件应用程序,也可以是一个复杂的系统。通过实践项目,参与者可以学习如何在实际环境中进行对象之间的组合和协作。 此外,在对象组合-2021中,参与者还可以参加讲座、研讨会或工作坊,与其他对对象组合感兴趣的人分享和交流经验。他们可以与专家学者互动讨论,提出问题,探讨对象组合的最佳实践和挑战。这种交流和合作可以帮助参与者扩展他们的知识和网络,并获得更深入的理解和见解。 综上所述,对象组合-2021 是一个关于对象组合的学习和实践活动,参与者通过学习基本概念,参与实践项目,并与他人交流合作来提高他们的对象组合能力和知识水平。这将为他们在软件开发、系统设计等领域中应用对象组合提供有力支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值