原题题号: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 授权协议,转载请注明来源,谢谢!