顺时针打印数组元素

先说说我做这个题的思路,其实一开始拿到这个题的时候,我半天没有想法。就是不知道从哪开始,后来我就在想,既然是顺时针打印输出,我就先模拟输出一圈的情况,然后一圈的情况能够正常输出了(一圈的输出有四种情况:上边界从左到右,右边界从上到下,下边界从右到左,左边界从下到上);那么怎么样才能继续内部的输出呢,那么我想如果可以在一个循环里,那就可以一圈一圈的输出了。那么问题又来了,循环的次数如何获得呢,我于是在纸上鼓捣了半天,发现这个循环次数是有规律的,于是我获得了循环的次数。那么在循环内部,如果我将第一次外圈的输出的边界条件找到,那么整个对数组的顺时针遍历不久完成了嘛。按照我的思路,我试着将原来外圈的固定的边界值更改,终于成功解决了这个问题。那么对于这道题的经验就是在你没有思路的时候,尝试着先一小步的尝试,你的每一次尝试都是对你思想的发散,然后当你的一小步尝试取得成功,你就可以在这个基础上往下一步走,这样就将一个问题分块解决掉了。

#include
using namespace std;
void print(int** &pArray,int row,int col)
{
    int i;
    int deque=(row>col?(col+1)/2:(row+1)/2);//循环次数
    //每次循环的起始坐标为(0,0)(1,1)(2,2)...
    //四个方向的一圈输出完成之后,则进入下一个循环,进行内部的输出
    for(int xunhuan=0;xunhuan    {//BEGIN
        //上边界从左到右
        for (i=xunhuan;i        {
            cout<        }
        //右边界从上到下
        for (i=xunhuan+1;i        {
            cout<        }
        //下边界从右到左
        for (i=col-2-xunhuan;i>=xunhuan;--i)
        {
            cout<        }
        //左边界从下到上
        for (i=row-2-xunhuan;i>=xunhuan+1;--i)
        {
            cout<        }
    }//END
}
int main()
{
    int **pArray;
    int row,col;
    cout<<"请分别输入行数和列数:"<    cin>>row>>col;//输入行数和列数
    
    //创建行指针?
    pArray=new int*[row];
    //为每一行分配空间
    for (int p=0;p    {
        pArray[p]=new int[col];
    }
    cout<<"请为数组赋值:"<    //为数组赋值
    for (int m=0;m    {
        for (int n=0;n        {
            cin>>pArray[m][n];
        }
    }
    print(pArray,row,col);
    return 0;
}

你可能感兴趣的:(数据结构/算法)