牛课网--走格子(环形遍历数组并且找出指定步数的位置)

题目链接:https://www.nowcoder.com/acm/contest/114/A

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int A[105],cnt;
void span(int x)
{
    cnt = 1;
    A[cnt++] = 0;
    if(x == 1) return ;
    if(x == 2)
    {
        A[cnt++] = 3;
        return ;
    }
    int sum = 0,cn = 1;
    while(1)
    {
        if(x - cn == 1)
        {
            sum = sum + 3;
            A[cnt++] = sum;
            break;
        }
        if(x - cn == 0)
        {
            break;
        }
        sum = sum + (x-cn)*4;
        A[cnt++] = sum;
        cn = cn + 2;
    }
    return ;
}
void path(int po,int cha,int n)
{
    int l=1+po-1;
    int r=n-po+1;
    int x=po,y=po;
    int op=1;
    while(cha)
    {
        if(op==1)
        {
            if(x+1==r) op++;
            x++;
        }
        else if(op==2)
        {
            if(y+1==r) op++;
            y++;
        }
        else if(op==3)
        {
            if(x-1==l) op++;
            x--;
        }
        else
        {
            y--;
        }
        cha--;
    }
    printf("%d %d\n",x,y);
}
int main()
{
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        memset(A,0,sizeof(A));
        span(n);
        int l,r,cha,vis=0;
        for(int i=1;i<cnt;i++) //m
        {
            if(m == A[i]) {vis=i;break;}
            if(m>A[i]) l=i;
            if(m<A[i]) {r=i;break;}
        }
        cha=m-A[l];
        if(vis!=0)
        {
            printf("%d %d\n",vis,vis);
        }
        else path(l,cha,n);
    }
    return 0;
}

分析:

这道题目不用数组做,只要善于发现一些小规律就好了,做出这道题目最大的原因就是冷静分析,拆分题目!

题目拆分主要为3部分:

1.如图一,对于给出的每一个边长,我们用数组储存每一圈对应可以走多少步。需要注意的是,偶数边与奇数的边对应的圈数不同。

2.对于第二个参数m,我们定位到它位于数组的哪一个范围之间,然后在对应的那一圈里面寻找就好了。(特殊:要考虑到m的步数值刚好落在每一层开始的点)

3,也是最重要的一步,就是根据所在的圈数,算出差值还差多少步,初始化x,y坐标为层数刚开始的点的坐标,遍历到这一层对应差值的点,这里遍历一圈无非是4种不同的

坐标记录方法,可以用op代表正在执行的操作种类,最后x,y对应的值就是解。

总结:这道题应该是大比赛上的签到题,它属于那种要心细还要冷静分析才能解决的题目,涉及到题目的分析,这一点非常的关键!!不要一上来就是二维数组的环形遍历,要找规律,找突破点,拆分题目!!最后,请带着你最初的梦想继续前进吧!

2018,6,9,1:35

猜你喜欢

转载自www.cnblogs.com/myxdashuaige/p/9158184.html