观察矩阵可以发现如下规律:
第一行: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;
}


京公网安备 11010502036488号