题目
题解
构造出数值不难,奇葩的是要按一定格式输出,而且就他妈给一个全是一位数构成的三角就让输出?那我咋知道要是存在两位该怎么对齐?
我告诉你,它是满足中间的数都是用printf("%6d");
格式输出的,前面空格需要计算。
其他的就比较简单了。
还有一点,什么狗屁帕斯卡三角,这就是杨辉三角,别扯别的,这个三角我只认杨辉。
中国人出题有更合适的中国名不用,却用外国名,多少差点文化自信。
代码
#include<iostream>
using namespace std;
const int N = 1e3+10;
typedef long long ll;
ll dp[N][N];
int n;
int main()
{
int n;
cin>>n;
for(int i = 0;i < N-10;i ++) dp[i][0] = dp[i][i] = 1;
for(int i = 0;i <= n;i ++, cout<<endl) {
for(int j = 0;j <= i;j ++) {
if(!dp[i][j]) dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
if(j) printf("%6lld", dp[i][j]); // 不是第一列就正常输出
else { // 是第一列,即全是1,第0行的1前面的空格个数为3*3+2,第1行为2*3+2,第2行为1*3+2……
for(int k = 1;k <= (n-i)*3+2;k ++) printf(" ");
printf("%lld", dp[i][j]);
}
}
}
}