UVA 10182 - Bee Maja

来源:互联网 发布:闪凌网络是真的吗 编辑:程序博客网 时间:2024/05/17 07:57

这道题题目大意,有给个图,一个图对应另一个图的不同坐标,给出一个图上的数字,让求出在另一个图上对应的坐标;

 

\"Maja\"                                      \"Willi\"

 

这道题如果只看左边那个图的话就会发现竖着的每一列纵坐标相同,而向左下方斜着的每一列纵坐标相同,但是这样并不能找出这些点的关系,就陷入了一个思维的误区,其实换个角度,如果把左边的坐标在直角坐标系上画出来,就比较容易看出这是一个很有规律的一个图,只需要 横 纵 坐标的加 减 就好了,至于加减多少那就看这个数所在的层数,层数是比较容易求出来的,因为中间是1个,下一圈是12,再下一圈18,除了中间那一个,其余每层增加了6个,然后根据坐标系便很容易看出每层需要加减多少;

code:

#include<stdio.h>
int find(int n)
{
    int begin=2,end=8,num=2,x=0,y=1;
    int cnt,i,j;
    if(n==1)
    {
        printf(\"0 0\\n\");
        return 1;
    }
    for(i=2; i<200; i++)
    {
        if(n>=begin&&n<=end)
        {
            cnt=i;
            break;
        }
        else
        {
            begin = end;
            end = end+6*i;
        }
    }
    for(i=1; i<cnt; i++)
    {
        for(j=0; j<i; j++)
        {
            if(num==n)
            {
                printf(\"%d %d\\n\",x,y);
                return 1;
            }
            else
                x--;
            num++;
        }
        for(j=0; j<i; j++)
        {
            if(num==n)
            {
                printf(\"%d %d\\n\",x,y);
                return 1;
            }
            else
                y--;
            num++;
        }

        for(j=0; j<i; j++)
        {
            if(num==n)
            {
                printf(\"%d %d\\n\",x,y);
                return 1;
            }
            else
            {
                x++;
                y--;
            }
            num++;
        }

        for(j=0; j<i; j++)
        {
            if(num==n)
            {
                printf(\"%d %d\\n\",x,y);
                return 1;
            }
            else
                x++;
            num++;
        }

        for(j=0; j<i; j++)
        {
            if(num==n)
            {
                printf(\"%d %d\\n\",x,y);
                return 1;
            }
            else
                y=y+1;
            num++;
        }


        if(num==n)
        {
            printf(\"%d %d\\n\",x,y);
            return 1;
        }
        else
            y++;
        num++;


        for(j=0; j<i; j++)
        {
            if(num==n)
            {
                printf(\"%d %d\\n\",x,y);
                return 1;
            }
            else
            {
                x--;
                y++;
            }
            num++;
        }
    }
}
int main()
{
    int n;
    while(scanf(\"%d\",&n)!=EOF)
        find(n);
    return 0;
}

原创粉丝点击