不是VIP会员,不能显示答案

题目解答

题目:
本题是一款模拟贫吃蛇程序,游戏是在一个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),则该程序时间复杂度为( )
考点:
分析:
解答:
评论:
老师: