【编程之美】 4.8统计所有蚂蚁出去的时间
蚂蚁爬杆的算法中,只求出了蚂蚁出杆的时间,但是没有得到每个蚂蚁出去的时间,这里没有固定的算法,采用编程模拟实现,代码如下:
#include<iostream>using std::cout;using std::endl;using std::swap;int left[29];int right[29];void fun()//首先判断是否在同一个位置,如果两个蚂蚁处于同一位置,交换两个蚂蚁的方向{for (int i = 1; i != 29; ++i)if (left[i] && right[i])swap(left[i], right[i]);}void f()//判断是否擦肩而过,擦肩而过后,交换两个蚂蚁之间的顺序{for (int i = 1; i != 29; ++i)if (left[i] && right[i + 1]){//swap(left[i],right[i]);//注释的是错误写法//swap(left[i+1],right[i+1]);//错误写法swap(left[i], right[i + 1]);//正确交换方法}}void move(){for (int i = 1; i != 29; ++i){left[i - 1] = left[i];right[29 - i] = right[29 - 1 - i];}}int main(){right[3] = 1;right[11] = 2;left[7] = 3;left[17] = 4;left[23] = 5;//right[5] = 1;//left[6] = 2;int count = 0;for (int i = 1; count != 5; ++i){fun();move();f();if (left[0] && ++count)cout << left[0] << "号蚂蚁在第 " << i << " 秒爬出\n";if (right[28] && ++count)cout << right[28] << "号蚂蚁在第 " << i << " 秒爬出\n";}return 0;}