推荐http://blog.csdn.net/erorr/article/details/5901120
这个问题的难点就是看透那个“穿透”的本质。
扩展问题:
1. 第i个蚂蚁离开的时间和别的蚂蚁路线是有关的,所以比较麻烦吧。
2. 如果在一个平面上运动,说不定会出现死锁的情况,6只蚂蚁组成三角形以上的情况就会出现。
注:一条边上的蚂蚁,背对背,角处应该头碰头,这样就死锁了。
3. 蚂蚁一共的碰撞也和蚂蚁的初始走向有关,应该可以分析的。
4. 放鸽子问题,应该是c x s / (a + b)
5. 不太清楚a是绝对速度还是相对速度,应该很简单。
掉了救生圈一小时,船行进了距离(a-b),而救生圈行进距离b,两者相差距离(a-b+b)=a
当此时回头追的时候,船速(a+b),救生圈还是(b),相当速度是a,则此时回头追花费(a/a)=1个小时才能追上。
这个题目是要求蚂蚁全部离开棍子的最短时间和最长时间
个人
#include <iostream>
using namespace std;
#define size 5
void calc(){
int lengths[]={3,7,11,17,23};
int len = 27;
int min=0;//全部走完,花费最小时间
int max = 0;//全部走完,花费最大时间
int constTime = 27;//走完棍子的完整长度花费时间
int timemax;
int timemin;
for(int i=0;i<size;i++){
if(lengths[i]>len/2){
timemax = lengths[i];
}else{
timemax = len-lengths[i];
}
timemin = constTime-timemax;
if(max<timemax)
max = timemax;
else{
if(min<timemin)
min = timemin;
}
}
cout<<"min:"<<min<<"max:"<<max<<endl;
}
int main(){
calc();
return 0;
}