顺时针打印数组元素

xiaoxiao2021-02-28  56

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

#include<iostream>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<deque;++xunhuan)    {//BEGIN        //上边界从左到右        for (i=xunhuan;i<col-xunhuan;++i)        {            cout<<pArray[xunhuan][i];        }        //右边界从上到下        for (i=xunhuan+1;i<row-xunhuan;++i)        {            cout<<pArray[i][col-1-xunhuan];        }        //下边界从右到左        for (i=col-2-xunhuan;i>=xunhuan;--i)        {            cout<<pArray[row-xunhuan-1][i];        }        //左边界从下到上        for (i=row-2-xunhuan;i>=xunhuan+1;--i)        {            cout<<pArray[i][xunhuan];        }    }//END}int main(){    int **pArray;    int row,col;    cout<<"请分别输入行数和列数:"<<endl;    cin>>row>>col;//输入行数和列数        //创建行指针?    pArray=new int*[row];    //为每一行分配空间    for (int p=0;p<row;++p)    {        pArray[p]=new int[col];    }    cout<<"请为数组赋值:"<<endl;    //为数组赋值    for (int m=0;m<row;++m)    {        for (int n=0;n<col;++n)        {            cin>>pArray[m][n];        }    }    print(pArray,row,col);    return 0;}

转载请注明原文地址: https://www.6miu.com/read-2613192.html

最新回复(0)