解题思路:
    有上下左右有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;

}


点赞(4)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论