見出し画像

Sky Technology lab: Question 4 解答

京大の Question 4 です。
C言語を用いました。

#include <stdio.h>

typedef struct P2D
{
    int x,y;
} p2d;

p2d jump(int x, int y)
{
    p2d r;
    double p,q,rate;

    if(x == 0)
    {
        r.x = x + 1 ;
        r.y = y - 2 ;
    }else if(y == 0)
    {
        r.x = x - 2 ;
        r.y = y + 1 ;
    }else if(x == y)
    {
        r.x = x - 2 ;
        r.y = y - 1 ;        
    }else
    {
        p = x ;
        q = y ;
        rate = q / p ;

        if(rate > 0 && rate < 1 )           // 0 < theta < pi/4
        {
            r.x = x - 2 ;
            r.y = y - 1 ;
        }else if(rate > 1)                  // pi/4 < theta < pi/2
        {
            r.x = x - 1 ;
            r.y = y - 2 ;            
        }else if(rate < 0 && rate > -1)     // - pi/4 < theta < 0
        {
            r.x = x - 2 ;
            r.y = y + 1 ;            
        }else                               // pi/2 < theta < 3pi/4
        {
            r.x = x + 1 ;
            r.y = y - 2 ;            
        }
    }

    return r ;
}

int vjump(int x, int y)
{
    int j;

    if(x == 0 && y == 0)
    {
        j = 0 ;
    }else if(x == 0 && y == 1)
    {
        j = 3 ;
    }else if(x == 0 && y == 2)
    {
        j = 2 ;
    }else if(x == 0 && y == 3)
    {
        j = 3 ;
    }else if(x == 1 && y == 0)
    {
        j = 3 ;
    }else if(x == 1 && y == 1)
    {
        j = 2 ;
    }else if(x == 1 && y == 2)
    {
        j = 1 ;
    }else if(x == 1 && y == 3)
    {
        j = 2 ;
    }else if(x == 2 && y == 0)
    {
        j = 2 ;
    }else if(x == 2 && y == 1)
    {
        j = 1 ;
    }else if(x == 2 && y == 2)
    {
        j = 4 ;
    }else if(x == 2 && y == 3)
    {
        j = 3 ;
    }else if(x == 3 && y == 0)
    {
        j = 3 ;
    }else if(x == 3 && y == 1)
    {
        j = 2 ;
    }else if(x == 3 && y == 2)
    {
        j = 3 ;
    }else if(x == 3 && y == 3)
    {
        j = 2 ;
    }

    return j ;
}

int main()
{
    int x,y ;
    p2d r;
    int i;

    i = 0 ;

    scanf("%d %d",&x,&y);
    if(x < 0)                           // r.x = abs(x) ;
    {
        r.x = x * (-1) ;
    }else
    {
        r.x = x ;
    }
    if(y < 0)                           // r.y = abs(y) ;
    {
        r.y = y * (-1) ;
    }else
    {
        r.y = y ;
    }

    while(r.x > 3 || r.y > 3)
    {
        if(r.x == 4 && r.y == 3)
        {
            r.x = r.x - 1 ;
            r.y = r.y - 2 ;
        }else if(r.x == 3 && r.y == 4)
        {
            r.x = r.x - 2 ;
            r.y = r.y - 1 ;
        }else
        {
            r = jump(r.x,r.y) ;
        }
        i = i + 1 ;
    }

    i = i + vjump(r.x,r.y) ;

    printf("%d\n",i);
    return 0;

-----

動け!タイムライン

動物園か水族館にいきたいですね。