蛇形填数

来源:互联网 发布:洛阳达内大数据培训 编辑:程序博客网 时间:2024/05/17 01:32
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3

样例输出

7 8 1

6 9 2

5 4 3

思路:题意都能理解,如果不清楚怎么写,一定是不知道怎么去控制,用四个变量控制四个边界,用二维数组来存数。



#include<iostream>#define maxn 110int s[maxn][maxn];using namespace std;int main(){    int i,j,m,n,left,right,up,down;//用left控制左边界,right控制右边界,up控制上边界,down控制下边界    cin>>n;    left=0;    right=n+1;    up=0;    down=n+1;    m=1;    while(1)    {        if(left<right-1)//当右边界大于左边界,则开始填充右竖列的数,从上往下        {            for(i=up+1;i<down;i++)            {                s[i][right-1]=m++;            }            right--;        }        else            break;        if(down-1>up)//当下边界大于上边界,则开始填充下横排的数,从右往左        {            for(i=right-1;i>left;i--)            {                s[down-1][i]=m++;            }            down--;        }        else            break;        if(left+1<right)//同理        {            for(i=down-1;i>up;i--)            {                s[i][left+1]=m++;            }            left++;        }        else            break;        if(up+1<down)//同理        {            for(i=left+1;i<right;i++)            {                s[up+1][i]=m++;            }            up++;        }        else            break;    }    for(i=1;i<=n;i++)    {        for(j=1;j<=n;j++)        {            if(j==1)//每行第一个数前面没有空格            {               cout<<s[i][j];            }            else                cout<<" "<<s[i][j];        }        cout<<endl;    }    return 0;}