【HNUST】跳格子
浏览 770 | 评论 0 | 字数 2959
TTQ
2020年02月09日
  • 原题题号:1695
    • 题目描述

    逸夫楼的大厅的地面有10行10列的石砖,我们用坐标(x,y)来表示石砖的位置。如图示:

    请输入图片描述

    一天lxl在逸夫楼大厅玩跳格子游戏,跳格子游戏有7个动作:1.向左转,2向右转,3向后转,4向左跳一格,5向前跳一格,6向右跳一格,7向后跳一格。游戏前,lxl在(1,1)处并面向y轴正方向,他会做n次动作,若某个动作会让lxl跳出逸夫楼大厅则原地不动,每一次动作后都需要你输出lxl当前的位置。当n次动作都做完后,你还需要统计lxl到达过多少个格子。

    • 输入
    第一行输入n(0<n<101),表示lxl做的动作次数,接下来有n行,每行一个整数x(0<x<8)表示要做的动作。
    • 输出
    每次动作后输出lxl的当前坐标,一共有n行。随后的第n+1行输出lxl到达过的格子总数。
    • 样例输入
    7
    5
    4
    1
    7
    3
    2
    6
    • 样例输出
    (1,2)
    (1,2)
    (1,2)
    (2,2)
    (2,2)
    (2,2)
    (1,2)
    3
    简单模拟题,但要注意身体朝向的不同会导致前进的方向也有所不同,并要处理好边缘,防止越界。代码如下:
    #include <iostream>
    #include <cstdio>
    int x = 1, y = 1, f = 1;
    bool map[11][11];
    using namespace std;
    void move(int);
    void fix();
    int main()
    {
        int n;
        cin >> n;
        int t;
        for (int i = 1; i <= n;i++)
        {
            cin >> t;
            move(t);
        }
        int sum=0;
        map[1][1] = true;
        for (int i = 1; i <= 10;i++)
            for (int j = 1; j <= 10;j++)
            if(map[j][i])
                sum++;
        cout << sum;
        //system("pause");
        return 0;
    }
     
    void move(int c)
    {
        if(c==1)
        {
            f--;
            if(f==0)
                f = 4;
        }
        else if(c==2)
        {
            f++;
            if(f==5)
                f = 1;
        }
        else if(c==3)
        {
            f += 2;
            if(f>=5)
                f -= 4;
        }
        else if(c==4)
        {
            if(f==1)
                x--;
            else if (f==2)
                y++;
            else if(f==3)
                x++;
            else if(f==4)
                y--;
            fix();
        }
        else if(c==5)
        {
            if(f==1)
                y++;
            else if(f==2)
                x++;
            else if(f==3)
                y--;
            else if (f==4)
                x--;
            fix();
        }
        else if(c==6)
        {
            if(f==1)
                x++;
            else if(f==2)
                y--;
            else if(f==3)
                x--;
            else if(f==4)
                y++;
            fix();
        }
        else if(c==7)
        {
            if(f==1)
                y--;
            else if(f==2)
                x--;
            else if(f==3)
                y++;
            else if(f==4)
                x++;
            fix();
        }
        cout << "(" << x << "," << y << ")" << endl;
        map[x][y] = 1;
    }
    void fix()
    {
        if(x>=11)
            x = 10;
        if(x<=0)
            x = 1;
        if(y>=11)
            y = 10;
        if(y<=0)
            y = 1;
    }
    
    
    本文作者:TTQ
    本文链接:https://blog.ponder.fun/archives/13.html
    最后修改时间:2020-02-09 10:02:57
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    评论
    与本文无关评论请发留言板。请不要水评论,谢谢。
    textsms
    支持 Markdown 语法
    email
    link
    评论列表
    暂无评论