3. 本题是一款模拟贫吃蛇程序,游戏是在一个a*a的网格上进行的。其中输入第一行一个整数a。第二行两个些数n和m。接下来是n行,每行第一个数为opt,表示操作编号。接下来的输入的变量与操作编号对应,输出:即第m秒过后的地图,蛇所在的位置输出
“o”,其余位置输出“.”以换行结尾。
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int a,mp[101][101];
int t[100003] ;
int y[100003] ;
int cnt;
int len=2,dir=3,die=0;
const int dx[5] = {0,0,-1,0,1};
const int dy[5] = {0,-1,0,1,0};
int nx=0, ny=1;
int px=1, py=2;
int check(int x, int yy)
{
if(x<1||x>a||yy<1||yy>a)
return 1;
if(cnt+1-mp[x][yy] < len)
return 1;
return 0;
}
void work()
{
if(die) return;
px += nx;
py += ny;
die=check(px,py);
if(die) return;
mp[px][py]= ++cnt;
}
void show()
{
for(int i= 1; i<=a; ++i)
{
for(int j=1; j<=a; ++j)
{
if(mp[i][j] != 0&& mp[i][j]>= cnt-len+1)
putchar('o');
else
putchar('.');
}
puts("");
}
}
int main()
{
mp[1][1]= ++cnt;
mp[1][2]= ++cnt;
int n,m,op,xx;
char s[3];
scanf("%d",&a);
scanf("%d%d",&n, &m);
while(n--)
{
scanf("%d%d",&op,&xx);
if(op==1)
{
t[xx]=1;
scanf("%s",s);
if(s[0]=='L')
y[xx]= 1;
else if(s[0]=='U')
y[xx]= 2;
else if(s[0]=='R')
y[xx]= 3;
else
y[xx]= 4;
}
else
{
t[xx]= 2;
}
}
for(int tm=1; tm<=m; ++tm)
{
if(t[tm]==1)
{
if(y[tm]%2!= dir%2)
{
dir = y[tm];
nx = dx[y[tm]];
ny = dy[y[tm]];
}
}
else if(t[tm]==2)
{
++len;
}
work();
if(die)
{
break;
}
}
show();
return 0;
}
判断题
1) (2分)由程序代码可知,贪吃蛇的初始长度为2,蛇头和蛇尾分别在坐标[1,2]、[1,1]处。( )
2) (2分) check函数是用来检测蛇是否吃到果实的。( )
3) (2分)第54行及第58行输入1 x y表示在第x秒按下了y键,y为LURD中的一种,分别表示按下了左、上,右、下四种按钮。( )
4) (2分)当输入样例如下所示时:10\n10 20\n2 1\n2 2\n2 3\n2 4\n2 5\n1 6 R\n1 7 D\n1 8 L\n1 9 U最终程序的运行结果所代表的含义可表示为贪吃蛇在第9秒过后就死亡了,因此最后贪吃蛇保持的是死亡前(第7秒过后)的位置。( )
选择题
5) 若输入地图边长为x,共n次操作(x>n),则该程序时间复杂度为( )