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

      

  • 相关阅读:
    第19篇-Kibana对Elasticsearch的实用介绍
    第18篇-用ElasticSearch索引MongoDB,一个简单的自动完成索引项目
    第17篇-使用Python的初学者Elasticsearch教程
    第16篇-关于Elasticsearch的6件不太明显的事情
    第15篇-使用Django进行ElasticSearch的简单方法
    第14篇-Python中的Elasticsearch入门
    第13篇-Elasticsearch查询-术语级查询
    第12篇-Elasticsearch全文查询
    MQTT
    rest-framework-@action()装饰器
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5448445.html
Copyright © 2011-2022 走看看