您的位置:首页 > 其它

蚂蚁爬竹竿问题

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

分析:最短时间11秒这里比较简单不做具体分析了。最大时间直接上代码
/************************************************************************************
*
*蚂蚁爬竹竿耗时最长的时间
*
*Created by:wxdjss (我小弟叫三水)
*
********************************************************************************************************************************/
#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,已经完成任务!\n",ANTS[i]);
}
}
return result;
}

/****************print()***********************/
void print()//打印输出结果
{
printf("任务消耗%d\t秒,",second);
printf("蚂蚁所在位置: A[%d],B[%d],C[%d],D[%d],E[%d]\n",\
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("任务都完成了!\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: