zoukankan      html  css  js  c++  java
  • 蚂蚁爬竹竿问题

    有一根27厘米的细木杆,在第3厘米、7厘 米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或 调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。

    分析:最短时间11秒这里比较简单不做具体分析了。最大时间直接上代码

    #include<stdio.h>
    
    #define longness 27//定义竹竿的长度27cm
    #define zero 0    //定义坐标原点
    #define antsnum 5//定义蚂蚁数量
    
    
    enum ants {A,B,C,D,E};//定义五个蚂蚁标签"A,B,C,D,E";
    char ANTS[antsnum]={'A','B','C','D','E'};//打印输出标签
    int position[antsnum]={3,7,11,17,23};//标定蚂蚁位置
    int direction[antsnum]={1,1,1,1,0};//最长时间走向为'A'向右,'B'向右,'C'向右,'D'向右,'E'向左
    int second=0;//初始化时间为0秒
    
    /***************move_cal()*********************/
    void move_cal()//行走计算函数
    {
        int i;
        for( i=0;i<antsnum;i++)
        {
    
            if(direction[i]==1)
                position[i]++;
            else
             position[i]--;
            if(position[i]>=longness) position[i]=longness;
            if(position[i]<=zero)  position[i]=zero;
        }
    }
    
    /*****************change_direction()*************/
    void change_direction(int direction[],int num)//当相遇时,改变方向
    {
     int i,j;
     move_cal();
     for(i=0;i<num-1;i++)
         for(j=i;j<num;j++)
         if((position[i]==position[j])&&
             (position[i]<longness&&position[i]>zero)&&
             (position[j]<longness&&position[j]>zero))
             {
                direction[i]=(direction[i]+1)%2;
                direction[j]=(direction[j]+1)%2;
             }
    }
    
    /*****************judgement_result*************/
    int judgement_result(int position[],int num)//判断完成任务情况
    { 
            int i;
            int result=0;
    
            for(i=0;i<num;i++)
            {
            if(position[i]>=longness) position[i]=longness;
            if(position[i]<=zero)  position[i]=zero;
            if(position[i]==longness||position[i]==zero)
                {
                 result=result+1;
                 printf("%c,已经完成任务!
    ",ANTS[i]);
                }
            }
            return result;
    }
    
    /****************print()***********************/
    void print()//打印输出结果
    {
            printf("任务消耗%d	秒,",second);
            printf("蚂蚁所在位置: A[%d],B[%d],C[%d],D[%d],E[%d]
    ",
            position[A],position[B],position[C],position[D],position[E]);
    
    }
    
    /*******************main()********************/
    int main()
    {
        while(judgement_result(position,antsnum)!=antsnum)//当任务没有完成时
        {
         second++;//秒加1
         change_direction(direction,antsnum);//判断是否改变路途方向
         print();//打印输出结果
        }
        printf("任务都完成了!
    ");
        return 0;
     }

     结果打印:

    任务消耗1 秒,蚂蚁所在位置: A[4],B[8],C[12],D[18],E[22]
    任务消耗2 秒,蚂蚁所在位置: A[5],B[9],C[13],D[19],E[21]
    任务消耗3 秒,蚂蚁所在位置: A[6],B[10],C[14],D[20],E[20]
    任务消耗4 秒,蚂蚁所在位置: A[7],B[11],C[15],D[19],E[21]
    任务消耗5 秒,蚂蚁所在位置: A[8],B[12],C[16],D[18],E[22]
    任务消耗6 秒,蚂蚁所在位置: A[9],B[13],C[17],D[17],E[23]
    任务消耗7 秒,蚂蚁所在位置: A[10],B[14],C[16],D[18],E[24]
    任务消耗8 秒,蚂蚁所在位置: A[11],B[15],C[15],D[19],E[25]
    任务消耗9 秒,蚂蚁所在位置: A[12],B[14],C[16],D[20],E[26]
    任务消耗10 秒,蚂蚁所在位置: A[13],B[13],C[17],D[21],E[27]
    E,已经完成任务!
    任务消耗11 秒,蚂蚁所在位置: A[12],B[14],C[18],D[22],E[27]
    E,已经完成任务!
    任务消耗12 秒,蚂蚁所在位置: A[11],B[15],C[19],D[23],E[27]
    E,已经完成任务!
    任务消耗13 秒,蚂蚁所在位置: A[10],B[16],C[20],D[24],E[27]
    E,已经完成任务!
    任务消耗14 秒,蚂蚁所在位置: A[9],B[17],C[21],D[25],E[27]
    E,已经完成任务!
    任务消耗15 秒,蚂蚁所在位置: A[8],B[18],C[22],D[26],E[27]
    E,已经完成任务!
    任务消耗16 秒,蚂蚁所在位置: A[7],B[19],C[23],D[27],E[27]
    D,已经完成任务!
    E,已经完成任务!
    任务消耗17 秒,蚂蚁所在位置: A[6],B[20],C[24],D[27],E[27]
    D,已经完成任务!
    E,已经完成任务!
    任务消耗18 秒,蚂蚁所在位置: A[5],B[21],C[25],D[27],E[27]
    D,已经完成任务!
    E,已经完成任务!
    任务消耗19 秒,蚂蚁所在位置: A[4],B[22],C[26],D[27],E[27]
    D,已经完成任务!
    E,已经完成任务!
    任务消耗20 秒,蚂蚁所在位置: A[3],B[23],C[27],D[27],E[27]
    C,已经完成任务!
    D,已经完成任务!
    E,已经完成任务!
    任务消耗21 秒,蚂蚁所在位置: A[2],B[24],C[27],D[27],E[27]
    C,已经完成任务!
    D,已经完成任务!
    E,已经完成任务!
    任务消耗22 秒,蚂蚁所在位置: A[1],B[25],C[27],D[27],E[27]
    C,已经完成任务!
    D,已经完成任务!
    E,已经完成任务!
    任务消耗23 秒,蚂蚁所在位置: A[0],B[26],C[27],D[27],E[27]
    A,已经完成任务!
    C,已经完成任务!
    D,已经完成任务!
    E,已经完成任务!
    任务消耗24 秒,蚂蚁所在位置: A[0],B[27],C[27],D[27],E[27]
    A,已经完成任务!
    B,已经完成任务!
    C,已经完成任务!
    D,已经完成任务!
    E,已经完成任务!
    任务都完成了!
    Press any key to continue

      

  • 相关阅读:
    洛谷 P1226 【模板】快速幂||取余运算 题解
    洛谷 P2678 跳石头 题解
    洛谷 P2615 神奇的幻方 题解
    洛谷 P1083 借教室 题解
    洛谷 P1076 寻宝 题解
    洛谷 UVA10298 Power Strings 题解
    洛谷 P3375 【模板】KMP字符串匹配 题解
    Kafka Shell基本命令
    Mybatis与Hibernate的详细对比
    MyBatis简介
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5448445.html
Copyright © 2011-2022 走看看