观察矩阵可以发现如下规律:
第一行:1, 1+2, 1+2+3, ..., n(n+1)/2
第二行:2, 2+3, 2+3+4, ..., n(n+1)/2
第k行: k(k-1)/2, k(k-1)/2+ (k+1), ...
因此我们可以先计算每一行的第一位数,后面的数可以根据第一位数得到,减少了计算量,代码如下:
#include<iostream> using namespace std; int main(){ int n; while(cin>>n){ int pre=0; for(int i=0;i<n;++i){ pre = i*(i+1)/2+1; // 每行首位 cout<<pre<<" "; for(int j=i+2;j<=n;++j){ pre += j; cout<<pre<<" "; } cout<<endl; } } return 0; }