原题链接
题目大意
输入
n
n
n,输出
(
a
+
b
)
n
(a+b)^n
(a+b)n的展开式。
注意:
- 如果系数为1,则需要省略系数
- 如果次数为1,则需要省略次数
- 如果次数为0,则需要省略
- 如果系数为0,则需要省略这一项
- 前面(a+b)^n 的次数是必有的
S a m p l e \mathbf{Sample} Sample I n p u t \mathbf{Input} Input
5
S a m p l e \mathbf{Sample} Sample O u t p u t \mathbf{Output} Output
(a+b)^5=a^5+5a^4b+10a^3b^2+10a^2b^3+5ab^4+b^5
解题思路
从
a
a
a和
b
b
b的次数来看,
a
a
a的次数从
n
n
n开始递减,
b
b
b的次数从
0
0
0开始递增。
那系数呢?把系数单独拎出来看一下:
1 5 10 10 5 1
这不就是杨辉三角的第
n
+
1
n+1
n+1行的数吗?
所以只要求出杨辉三角的第
n
+
1
n+1
n+1行的数,再做一些输出处理,就可以切掉此题
上代码
#include<iostream>
using namespace std;
int n;
unsigned long long a[10001];
int main()
{
cin>>n;
a[0]=1;
for(int i=1; i<=n; i++)
{
a[i]=1;
for(int j=i-1; j>0; j--)
a[j]+=a[j-1];
}
cout<<"(a+b)^"<<n<<"=";
int aa=n,bb=0;
for(int i=0; i<=n; i++)
{
if(a[i]>1) cout<<a[i];
if(aa>1) cout<<"a^"<<aa;
else if(aa==1) cout<<"a";
if(bb>1) cout<<"b^"<<bb;
else if(bb==1) cout<<"b";
if(i<n) cout<<"+";
aa--,bb++;
}
cout<<endl;
return 0;
}
完美切题 ∼ \sim ∼