#include <iostream>
using namespace std;
int main() {
int trag[34][34];
trag[0][0]=1;
for(int j=1;j<=33;j++)
trag[0][j]=0;
int n;
while (cin >>n) { // 注意 while 处理多个 case
for(int i=1;i<=33;i++) //i是行数
{trag[i][0]=1; //每行第一列直接设为1
for(int j=1;j<=33;j++)//j是列数,第一列已为1,直接从第二列赋值
{
trag[i][j]=trag[i-1][j]+trag[i-1][j-1];//其值为上方加上左方数之和
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<i;j++)//第n行只输出前n-1个数
cout<<trag[i][j]<<" ";
cout<<trag[i][i]<<endl;//最后一个数单独输出,不带空格,额外加一个换行
}
}
}
// 64 位输出请用 printf("%lld")
递归的解法到底是怎么想出来的

京公网安备 11010502036488号