【编程之美】 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;
}

代码采用模拟方法,统计每个蚂蚁出去的时间,如果只计算出去时间,不考虑是哪个蚂蚁,可以使用《编程之美》书上的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值