C 语言程序设计实验题 移动的机器人
★实验任务
阿狗设计了一个升级版机器人,希望它能够在平面的战场中行走。
地图分为 n*m 格,有的格子有怪物,机器人在经过的时候会受到攻击,去掉和攻击力相
当的 HP。有的格子有补血点,能够增加机器人的 HP。
阿狗需要一个小程序,使得在输入机器人当前的坐标位置,以及前进方向步数时,希望
知道机器人能否成功行进(在起始位置,机器人为免疫状态,不加血也不去血。在行进过程中
HP<=0 视为机器人死亡,如果机器人撞到墙,将直接死亡)。(地图已知)
★数据输入
输入的第一行包括 3 个数字 n m hp p(0<n<=1000, 0<m<1000,0<p<1000),分别表示行
数、列数、机器人初始 hp,询问数
接下来为 n 行 m 列的整数矩阵,负数表示机器人将扣相应的 HP,正数表示将增加 HP。
再接下来有 p 行,每行表示一个操作询问,分别为 i j dir step,i j 表示机器人当前
所处的位置,dir 表示机器人将前进一步的方向,step 为前进步数。0 为在地图上向左,1
为向右,2 为向上,3 为向下。
★数据输出
对于每个操作,如果能够机器人最终死亡,输出单行“DIE!”,否则输出“LIVE!”
输入示例 输出示例
3 3 10 5
-10 1 5
-1 -8 9
6 -5 8
0 1 0 1
0 2 0 2
1 2 0 3
2 2 3 5
1 1 2 1
DIE!
LIVE!
DIE!
DIE!
LIVE!
#include <stdio.h>
int a[1005][1005];void main()
{
int i,j,n,m,p,t,hp,dir,step,k,x,y;
scanf("%d%d%d%d",&n,&m,&t,&p);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
while(p--)
{
hp=t;
scanf("%d%d%d%d",&x,&y,&dir,&step);
if(dir==0)
{
k=y-step;
if(k<0) printf("DIE!\n");
else
{
for(i=y-1;i>=k;i--)
{hp+=a[x][i];if(hp<=0)break;}
if(hp<=0) printf("DIE!\n");
else printf("LIVE!\n");
}
}
if(dir==1)
{
k=y+step;
if(k>=m) printf("DIE!\n");
else
{
for(i=y+1;i<=k;i++)
{hp+=a[x][i];if(hp<=0)break;}
if(hp<=0) printf("DIE!\n");
else printf("LIVE!\n");
}
}
if(dir==2)
{
k=x-step;
if(k<0) printf("DIE!\n");
else
{
for(i=x-1;i>=k;i--)
{hp+=a[i][y];if(hp<=0)break;}
if(hp<=0) printf("DIE!\n");
else printf("LIVE!\n");
}
}
if(dir==3)
{
k=x+step;
if(k>=n) printf("DIE!\n");
else
{
for(i=x+1;i<=k;i++)
{hp+=a[i][y];if(hp<=0)break;}
if(hp<=0) printf("DIE!\n");
else printf("LIVE!\n");
}
}
}
}