解题思路:
有上下左右有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语言代码)浏览:1481 |
printf基础练习2 (C语言代码)浏览:955 |
用筛法求之N内的素数。 (C语言代码)浏览:1386 |
简单的a+b (C语言代码)浏览:601 |
大神老白 (C语言代码)浏览:690 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题6.5 (C++代码)浏览:487 |
printf基础练习2 (C语言代码)浏览:547 |
1035 题解浏览:875 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:755 |