有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、18厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
要求:用类模拟出蚂蚁的行为特性,进而模拟出五只蚂蚁在木杆上的运行过程来编程求解。不能通过数学的方式直接用公式计算。
解题思路:
把每个蚂蚁当作一个对象操作,有pos(位置)、direction(走向)、state(状态)属性,只需要在蚂蚁移动的过程中,每移动一次就判断是否走出了杆的长度(0~27),如果走出了范围,马上改变蚂蚁的状态;判断是否有蚂蚁碰面了,如果有碰面,就马上改变蚂蚁的走向。记录时间,输出最大的和最小的。
代码实现:
class Main{
public static void main(String args[]){
int min=999,max=-999;
for(int i=0;i<=1;i++){ //利用五个for来改变蚂蚁的初始走向
for(int j=0;j<=1;j++){
for(int k=0;k<=1;k++){
for(int m=0;m<=1;m++){
for(int n=0;n