正文

输出蛇形矩阵2009-12-11 04:27:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/shenjinggege/50347.html

分享到:

练个题目 蛇行矩阵 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;}

阅读(2556) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册