糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 蚂蚁爬竹竿问题

蚂蚁爬竹竿问题

时间:2023-04-01 19:24:53

相关推荐

蚂蚁爬竹竿问题

有一根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++;//秒加1change_direction(direction,antsnum);//判断是否改变路途方向print();//打印输出结果}printf("任务都完成了!\n");return 0; }

如果觉得《蚂蚁爬竹竿问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。