蚂蚁爬杆的算法中,只求出了蚂蚁出杆的时间,但是没有得到每个蚂蚁出去的时间,这里没有固定的算法,采用编程模拟实现,代码如下:
#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;
}
代码采用模拟方法,统计每个蚂蚁出去的时间,如果只计算出去时间,不考虑是哪个蚂蚁,可以使用《编程之美》书上的方法。