小菜鸟


私信TA

用户名:huangzhenc

访问量:2021

签 名:

等  级
排  名 12664
经  验 962
参赛次数 1
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

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

  评论区

  • «
  • »