练个题目 蛇行矩阵 Problem蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 Input本题有多组数据,每组数据由一个正整数N组成。(N不大于100) Output对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。 矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。 Sample Input5Sample Output1 3 6 10 152 5 9 144 8 137 1211 #include <iostream>#include <assert.h>#include <iomanip>using namespace std;int main(){ int NumLines; cout<<"输入行数:"; cin>>NumLines; assert(NumLines<=100 && NumLines>=2); //动态分配二维数组 int **p=new int* [NumLines]; for(int i=0;i<NumLines;i++) *(p+i)=new int[NumLines]; int output_width=NumLines*(NumLines+1)/2; int num_digits=1; //计算数据输出的宽度 while(true) { if(output_width==0) break; else { output_width/=10; num_digits++; } } p[0][0]=1; //计算第一列的数字 for(int iRow=1;iRow<NumLines;iRow++) p[iRow][0]=p[iRow-1][0]+iRow; //计算输出蛇形矩阵 for(int iRow=0;iRow<NumLines;iRow++) for(int iCol=0;iCol<NumLines;iCol++) { if(iCol==0) { cout<<setiosflags(ios::left)<<setw(num_digits)<<p[iRow][iCol]; } else { if(iRow<NumLines-1-iCol) { p[iRow][iCol]=p[iRow][iCol-1]+iCol+1+iRow; cout<<setiosflags(ios::left)<<setw(num_digits)<<p[iRow][iCol]; } else if(iRow==NumLines-1-iCol) { p[iRow][iCol]=p[iRow][iCol-1]+iCol+1+iRow; cout<<setiosflags(ios::left)<<setw(num_digits)<<p[iRow][iCol]<<'\n'; } } } //释放二维数组 for(int i=0;i<NumLines;i++) delete []*(p+i); delete []p; return 0;}

评论