顺时针打印数组元素

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

#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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9号信箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值