详见
Matrix67 http://www.matrix67.com/blog/archives/120 讲的很好
大概的套路:
#include <iostream> using namespace std; const int maxn=10000; int c1[maxn],c2[maxn]; int main() { int n,i,j,k; while(cin>>n&&n) { for(i=0;i<=n;i++) { c1[i]=1; c2[i]=0; }//这里是对第一层括号进行初始化 for(i=2;i<=n;i++)//从第2层到第n层括号 { for(j=0;j<=n;j++)//每一层的1~m项 { for(k=0;k+j<=n;k+=i)//用第i层中的每一项(1~n)去乘之前的结果(1~m项)把中间生成的变量记录到数组C2中 c2[j+k]+=c1[j]; } for(int j=0;j<=n;j++)//更新数组C1 { c1[j]=c2[j]; c2[j]=0; } } //输出C1[n]就是 X^n的系数 for(int i=0;i<=n;i++) cout<<c1[i]<<" "; cout<<endl; } return 0; }