【SSL】2021-08-16 1381.二项式乘方展开式

原题网址

由于某些原因,这个网址会进不去…

1381.二项式乘方展开式 - 原题网址

题目描述

光光最近在研究一个问题:在整式的乘法中,我们知道 ( a + b ) 1 = a + b , ( a + b ) 2 = a 2 + 2 a b + b 2 (a+b)^{1}=a+b, (a+b)^{2}=a^{2}+2ab+b^{2} (a+b)1=a+b(a+b)2=a2+2ab+b2 ,等等,这些都可以用简单的手算求得。但是我们如果要求的 ( a + b ) n (a+b)^{n} (a+b)n 展开式,就不容易很快手算了。光光需要你去帮助他,这个时候应该如何去解答这个问题?

格式

输入格式

输入仅一行,为 n n n的值。

输出格式

输出只需输出一行表达式,格式为:
(a+b)^n=*a^n+*a^(n-1)b+*a^(n-2)b^2+…+*b^n
其中 ∗ * 为系数。
注意:

  • 如果系数为0,则需要省略该项
  • 如果系数为1,则需要省略系数
  • 如果次数为0,则需要省略次数
  • 如果次数为1,则需要省略次数
  • 前面(a+b)^n的次数是必有的

样例

输入样例

5

输出样例

(a+b)^5=a^5+5a^4b+10a^3b^2+1a^2b^3+5ab^4+b^5

说明

30 % 30\% 30%的数据中, n ≤ 18 n\le18 n18
60 % 60\% 60%的数据中, n ≤ 34 n\le34 n34
100 % 100\% 100%的数据中, n ≤ 66 n\le66 n66

提示:无须使用高精度

作者表示:非常良心啊!

解题思路

观察各项的系数,可以发现其值为杨辉三角对应行的数。
即当 n = 5 n=5 n=5时,各项系数分别为1,5,10,10,5,1
而各项的次数也与 n n n的值有关系。
因此,可以利用 f o r for for循环来输出。

Code

#include<bits/stdc++.h>
#define maxn 100
using namespace std;
long long n, a[maxn + 1];

void init() // 在此执行预处理 
{
	cin>>n;
	a[1] = 1; // 初始化杨辉三角
	for (int i = 1; i <= n; i ++) for (int j = i + 1; j >= 1; j --) a[j] += a[j - 1];
	// 使用一维数组计算杨辉三角
	printf("(a+b)^%d=", n);
}

void oput() // 在此输出结果 
{
	for (int i = 1; i <= n; i ++)
	{
		if (a[i] == 0) continue; // 如果系数为0,则不输出(可以省略)
		if (a[i] != 1) cout<<a[i];
		cout<<"a";
		if (n - i) printf("^%d", n - i + 1);
		if (i - 1) cout<<"b";
		if (i > 2) printf("^%d", i - 1);
		cout<<"+";
		// 以上if内的逻辑就是判断要不要输出(如判断次数是否为0或1)
	}
	if (n - 1) printf("b^%d", n);
	else cout<<"b"; // 当n=1时,即输出b
}

int main()
{
	init();
	oput();
	// 模块化处理!
	return 0;
}

大功告成 ∼ \sim

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值