problem.php?id=1044

来源:互联网 发布:自己印t恤 知乎 编辑:程序博客网 时间:2024/05/26 17:48

问题 1044. – 数圈

1044: 数圈

时间限制: 1 Sec  内存限制: 128 MB
提交: 243  解决: 105
[提交][状态][讨论版]

题目描述


以1为中心,用2,3,4, …, n, …, n*n的数字围绕着中心输出数圈, 如若n=4,则

7 8 9 10

6 1 2 11

5 4 3 12

16 15 14 13

输入

一个整数n(1<=n<=10)

输出

数圈矩阵

样例输入

5

样例输出

21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13

提示

来源

[提交][状态]

解决方法:

以下是我写的代码。

#include <iostream>#include <cmath>#include <cstdio>using namespace std;const int N=20;int main(){    int n,i,j,tp,ts,tw,flag;    cin>>n;    int a[N][N],cnt=1;    for(i=0;i<N;i++)        for(j=0;j<N;j++)            a[i][j]=0;    a[N/2][N/2]=1;    i=N/2;j=N/2;    while(cnt!=n*n)    {        tp=(int)sqrt(cnt);        if(tp*tp==cnt)// 1,4,9,16这些值对应的坐标         {            ts=cnt;            tw=tp;            if(tp%2!=0) //若为奇数,则向右移动             {                a[i][j+1]=cnt+1;                j=j+1;                flag=4;            }            else//否则向左移动             {                a[i][j-1]=cnt+1;                j=j-1;                flag=3;            }        }           else if(ts+1==cnt)//若为上述点后的第一个点         {            if(tw%2==0)//为偶数则向上移动             {                a[i-1][j]=cnt+1;                i=i-1;                flag=1;            }            else//否则向下移动             {                a[i+1][j]=cnt+1;                i=i+1;                flag=2;            }        }        else if(cnt==(tw+1)*(tw+1)-tw)//若为靠近下一个平方点的四边顶点         {            if((tw+1)%2==0)//若下一个平方点开方为偶数,则向左移动             {                a[i][j-1]=cnt+1;                j=j-1;                flag=3;            }            else//否则向右移动             {                a[i][j+1]=cnt+1;                j=j+1;                flag=4;            }        }        else//处理非四周顶点情况         {            if(flag==1)//若上一个点是向上移动,则继续向上移动             {                a[i-1][j]=cnt+1;                i=i-1;            }            else if(flag==2) //若上一个点是向下移动,则继续向下移动             {                a[i+1][j]=cnt+1;                i=i+1;            }            else if(flag==3)//若上一个点是向左移动,则继续向左移动             {                a[i][j-1]=cnt+1;                j=j-1;            }            else //若上一个点是向右移动,则继续向右移动             {                a[i][j+1]=cnt+1;                j=j+1;            }        }        cnt++;    }    bool qp=false;    for(i=0;i<N;i++)    {        if(qp) break;        for(j=0;j<N;j++)            if(a[i][j]!=0)            {                ts=i;                tw=j;                qp=true;                break;            }    }    for(i=0;i<n;i++)    {        for(j=0;j<n-1;j++)        {            cout<<a[ts+i][tw+j]<<" ";        }        cout<<a[ts+i][tw+n-1]<<endl;    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 离职后一级建造师注册证怎么办 京牌货车报废挂靠公司不给办怎么办 二建挂靠注册证书到期了怎么办 二建证书挂靠公司不给钱怎么办 二建拿到证书原单位不解锁怎么办 凯云软件清单锁定只读了怎么办 苹果笔记本鼠标触摸板没反应怎么办 苹果笔记本键盘和触摸板失灵怎么办 苹果手机输入密码显示已停用怎么办 苹果7p手机刷机黑屏了怎么办 苹果5s来电接听屏幕卡顿怎么办? 手机摔了一下触屏失灵怎么办 小米手机摔了一下触屏失灵怎么办 苹果6sp触摸ic坏了怎么办 苹果4s屏幕摔裂了怎么办 新换的手机内屏颜色太亮怎么办 苹果手机摔了一下屏幕失灵怎么办 苹果手机6s屏幕坏了怎么办 苹果6s屏幕摔坏了怎么办 苹果手机屏幕进油了屏幕变暗怎么办 苹果手机不小心屏幕进油了怎么办 苹果6充电插口螺丝口坏了怎么办 苹果5s手机安装屏幕翘边怎么办 苹果手机摔了一下触摸屏失灵怎么办 苹果手机摔了下触摸屏失灵怎么办 苹果6老是屏幕失灵或者闪屏怎么办 华为荣耀8手触摸屏乱跳失灵怎么办 苹果5s屏幕有半边竖纹怎么办 苹果5s电源键坏了怎么办 苹果6s手机触屏失灵怎么办 不能取电池的手机触屏不灵怎么办? 7p主板触摸ic坏了怎么办 小米六手机摔了一下屏幕失灵怎么办 魅蓝5s触屏失灵怎么办 苹果手机键盘字母顺序乱了怎么办 红米手机进水后屏幕失灵怎么办 苹果7plus主屏按键坏了怎么办 苹果六手机上的红色变成粉色怎么办 苹果手机出现闪屏和手感不灵怎么办 荣耀6plus后开不了机怎么办 苹果手机touch id密码忘了怎么办