cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL a[40];
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n<0) break;
printf("2^%d=",n);
printf("1+");
//
// LL ans=n;
// for(int i=1;i<n;i++)
// {
// ans*=(n-i);
// }
for(int i=1;i<=33;i++)
{
a[i]=i;
}
for(int i=1;i<=33;i++)
{
for(int j=1;j<i;j++)
{
a[i]*=(i-j);
}
}
//printf("%lld\n",a[n]);
//printf("1+");
// for(int i=1;i<33;i++)
// {
// //printf("%I64d+",a[n]/a[n-i]/a[i]);
// cout<<a[n]/a[n-i]/a[i]<<"+";
// }
for(int i=1;i<n;i++)
{
//printf("%I64d+",a[n]/a[n-i]/a[i]);
cout<<a[n]/a[n-i]/a[i]<<"+";
}
printf("1");
printf("\n");
}
return 0;
}
感觉这个代码很有道理,先初始化处理,计算出所有数字的阶乘,然后输出答案,但是WA了
参考题解:
cpp
#include<bits/stdc++.h>
using namespace std;
int dp[40][40];
void initialize()
{
dp[0][0]=1;
for(int i=1;i<=33;i++)
{
dp[i][0]=dp[i][i]=1;
for(int j=1;j<=i;j++) dp[i][j]=dp[i-1][j]+dp[i-1][j-1];
}
}
int main()
{
initialize();
int n;
while(~scanf("%d",&n))
{
if(n<0) break;
printf("2^%d=1",n);
for(int i=1;i<=n;i++) printf("+%d",dp[n][i]);
printf("\n");
}
return 0;
}
我们初始化出来的杨辉三角长这样,不是数学里面的正三角形形状
杨辉三角的美妙之处在于:它是如此足够简单,但本身在数学上却拥有丰富的魅力。
这是数学中的最令人称奇的事物之一,随便取诸多数学性质中的某个,就能表明它是多么的精彩绝伦。
比如:隐藏数列、完全平方数、斐波那契数列、谢尔宾斯基三角、组合数学、二项式定理等等,这些都都可以在杨辉三角形中找到,你发现了吗?
版权声明:本文为CSDN博主「Albert Edison」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_63325890/article/details/122781323
要对杨辉三角的数字敏感一些,下一次遇到类似的样例数据可以迅速的反应过来。杨辉三角的打印也是类似于动态规划的状态转移方程,根据前面的计算结果来计算当前的数字,之后的计算结果根据当前的计算结果来计算。