解题思路:
有上下左右有4种情况,黑白有两种情况,分别组合分析就有8种可能,把上下左右用1234分别代替,代表4种情况。
注意事项:
要知道走0步也要算在内,不然容易算错(菜菜的我因为忘记走0步这个,两天提交10次,成功拉低这道题1%的成功率),希望大家能吸取我的这个教训。
参考代码:
#include<stdio.h>
#define U 1
#define D 2
#define L 3
#define R 4
int A[102][102]={0};
/*首先模仿一只蚂蚁*/
struct ant
{
int x_direction,y_direction;//储存位置
int S;//储存方向
}ant;
int main()
{
int m,n,x,y,i,j,k,flag=1;
char S;
scanf("%d%d",&m,&n);
if(m<=3||m>=100||n<=3||n>=100)return 0;
/*创建一个供蚂蚁走的地图*/
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
scanf("%d",&A[i][j]);
}
scanf("%d %d %c %d",&x,&y,&S,&k);
if(x>m-1||y>n-1)return 0;
if(S=='U')ant.S=U;
else if(S=='D')ant.S=D;
else if(S=='L')ant.S=L;
else if(S=='R')ant.S=R;
else return 0;
/*初始化蚂蚁*/
ant.x_direction=x;
ant.y_direction=y;
/*让蚂蚁按照要求动起来*/
if(k==0)flag=0;
while(flag)
{
k--;
switch(ant.S)
{
case U://蚂蚁头朝上
{
if(A[ant.x_direction][ant.y_direction]==1)//黑色的情况
{
ant.S=R;
A[ant.x_direction][ant.y_direction]=0;
ant.y_direction=ant.y_direction+1;
}
else if(A[ant.x_direction][ant.y_direction]==0)//白色的情况
{
ant.S=L;
A[ant.x_direction][ant.y_direction]=1;
ant.y_direction=ant.y_direction-1;
}
if(ant.x_direction>m-1||ant.y_direction>n-1||ant.x_direction<0||ant.y_direction<0)return 0;
break;
}
case D://蚂蚁头朝下
{
if(A[ant.x_direction][ant.y_direction]==1)//黑色的情况
{
ant.S=L;
A[ant.x_direction][ant.y_direction]=0;
ant.y_direction=ant.y_direction-1;
}
else if(A[ant.x_direction][ant.y_direction]==0)//白色的情况
{
ant.S=R;
A[ant.x_direction][ant.y_direction]=1;
ant.y_direction=ant.y_direction+1;
}
if(ant.x_direction>m-1||ant.y_direction>n-1||ant.x_direction<0||ant.y_direction<0)return 0;
break;
}
case L://蚂蚁头朝左
{
if(A[ant.x_direction][ant.y_direction]==1)//黑色的情况
{
ant.S=U;
A[ant.x_direction][ant.y_direction]=0;
ant.x_direction=ant.x_direction-1;
}
else if(A[ant.x_direction][ant.y_direction]==0)//白色的情况
{
ant.S=D;
A[ant.x_direction][ant.y_direction]=1;
ant.x_direction=ant.x_direction+1;
}
if(ant.x_direction>m-1||ant.y_direction>n-1||ant.x_direction<0||ant.y_direction<0)return 0;
break;
}
case R://蚂蚁头朝右
{
if(A[ant.x_direction][ant.y_direction]==1)//黑色的情况
{
ant.S=D;
A[ant.x_direction][ant.y_direction]=0;
ant.x_direction=ant.x_direction+1;
}
else if(A[ant.x_direction][ant.y_direction]==0)//白色的情况
{
ant.S=U;
A[ant.x_direction][ant.y_direction]=1;
ant.x_direction=ant.x_direction-1;
}
if(ant.x_direction>m-1||ant.y_direction>n-1||ant.x_direction<0||ant.y_direction<0)return 0;
break;
}
}
if(k==0)flag=0;
}
if(ant.x_direction>m-1||ant.y_direction>n-1||ant.x_direction<0||ant.y_direction<0)return 0;
printf("%d %d",ant.x_direction,ant.y_direction);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复