做题感想:
下面给的程序是比赛时自己打的,整整弄了我一个多小时~
结束后,看了看老师的标程,感觉疯了~就几个判断~
然后呢~打了个表,交上去,本来想扔上来,发先42024 bytes,我又没保存程序,只能在题库上打开,但是程序长度过大打不开bi————
题目大意:
Smart最近在研究一个问题:
在整式的乘法中,我们知道(a+b)^1=a+b,(a+b)^2=a^2+2ab+b^2 ,等等,这些都可以用简单的手算求得。 但是我们如果要求的(a+b)^n展开式, 就不容易很快手算了。
Smart需要你去帮助他,这个时候应该如何去解答这个问题?
输入
输入仅一行,一个整数n。
输出
输出一行表达式,格式为:
(a+b)^n=?a^n+?a^(n-1)b+?a^(n-2)b^2+…+?b^n
其中” ? “为系数。如果系数为 1,则需要省略系数;如果次数为 1,则需要省略次数;如果次数为 0,则需要省略;如果系数为 0,则需要省略这一项。注意:前面(a+b)^n 的次数n是必有的。
样例输入
样例输入1
3
样例输入2
5
样例输出
样例输出1
(a+b)^3=a^3+3a^2b+3ab^2+b^3
样例输出2
(a+b)^5=a^5+5a^4b+10a^3b^2+10a^2b^3+5ab^4+b^5
数据范围限制
30%的数据:n≤18;
60%的数据:n≤34;
100%的数据:n≤66。
解题思路:
先一个杨辉三角~,然后一系列判断烦死我了
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,a[501],b[501],l;unsigned long long d[501][501];
void yhsj()
{
for(int i=2;i<=n;i++)
for (int j=2;j<=i;j++)
d[i][j]=d[i-1][j-1]+d[i-1][j];
}
int main()
{
freopen("power.in","r",stdin);
freopen("power.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++)
d[i][1]=1,d[i][i+1]=1;
yhsj();//杨辉三角求C(n,i)
printf("(a+b)^%d=",n);
for (int i=0;i<=n;i++)
//一系列骚判断,if语句太多,就不写解析了~
{
if (i==0) {if (n==1) printf("a"); else {printf("a^");printf("%d",n);}continue;}
if (i==n) {if (n==1) printf("+b"); else {printf("+b^");printf("%d",n);}continue;}
l=n-i;
if (d[n][i+1]==0) continue;
if (l!=0)
{
if (l==1&&i==1&&d[n][i+1]==1) {printf("+ab");continue;}
if (l!=1&&i==1&&d[n][i+1]==1) {printf("+a^");printf("%d",l);printf("b");continue;}
if (l==1&&i!=1&&d[n][i+1]==1) {printf("+ab^");printf("%d",i);continue;}
if (l!=1&&i!=1&&d[n][i+1]==1) {printf("+a^");printf("%d",l);printf("b^");printf("%d",i);continue;}
if (l==1&&i==1&&d[n][i+1]!=1) {printf("+");printf("%lld",d[n][i+1]);printf("ab");continue;}
if (l!=1&&i==1&&d[n][i+1]!=1) {printf("+");printf("%lld",d[n][i+1]);printf("a^");printf("%d",l);printf("b");continue;}
if (l==1&&i!=1&&d[n][i+1]!=1) {printf("+");printf("%lld",d[n][i+1]);printf("a");printf("b^");printf("%d",i);continue;}
if (l!=1&&i!=1&&d[n][i+1]!=1) {printf("+");printf("%lld",d[n][i+1]);printf("a^");printf("%d",l);printf("b^");printf("%d",i);continue;}
}
if (i==1&&d[n][i+1]==1) {printf("+b"); continue;}
if (i!=1&&d[n][i+1]==1) {printf("+b^");printf("%d",i); continue;}
if (i==1&&d[n][i+1]!=1) {printf("+");printf("%lld",d[n][i+1]);printf("b"); continue;}
if (i!=1&&d[n][i+1]!=1) {printf("+");printf("%lld",d[n][i+1]);printf("b^");printf("%d",i);continue;}
}
}