蚂蚁都离开木杆 的一个解法
2011-04-03 16:32
267 查看
全新整理:微软、谷歌、百度等公司经典面试100题
26、有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。
编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
enum ORI
{
lo = 0,
ro
};
struct ant
{
int w;
ORI r;
};
void findmaxmin(int l, int *p, int n, int &min, int &max)
{
ant * q = new ant
;
int m = pow(2, n);
min = 10000000;
max = 0;
for(int i=0;i<m;i++)
{
unsigned flag = 1;
for(int j=0;j<n;j++)
{
q[j].w = p[j];
q[j].r = i&flag?lo:ro;
flag <<= 1;
}
int nCnt = 0;
int nAnt = 5;
while(nAnt)
{
for(int k=0;k<n;k++)
{
if(q[k].w!=0 &&q[k].w!=l)
{
if(q[k].r==lo)
q[k].w--;
else
q[k].w++;
if(q[k].w==0 ||q[k].w==l)
nAnt--;
}
}
for(int k=0;k<n;k++)
{
for(int t=k+1;t<n;t++)
{
if(q[k].w==q[t].w)
{
q[k].r = q[k].r==lo?ro:lo;
q[t].r = q[t].r==lo?ro:lo;
}
}
}
nCnt++;
}
if(nCnt<min) min = nCnt;
if(nCnt>max) max = nCnt;
}
delete []q;
}
int _tmain(int argc, _TCHAR* argv[])
{
int min, max;
int p[5] = {3,7,11,17,23};
findmaxmin(27, p, 5, min, max);
return 0;
}
26、有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。
编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
enum ORI
{
lo = 0,
ro
};
struct ant
{
int w;
ORI r;
};
void findmaxmin(int l, int *p, int n, int &min, int &max)
{
ant * q = new ant
;
int m = pow(2, n);
min = 10000000;
max = 0;
for(int i=0;i<m;i++)
{
unsigned flag = 1;
for(int j=0;j<n;j++)
{
q[j].w = p[j];
q[j].r = i&flag?lo:ro;
flag <<= 1;
}
int nCnt = 0;
int nAnt = 5;
while(nAnt)
{
for(int k=0;k<n;k++)
{
if(q[k].w!=0 &&q[k].w!=l)
{
if(q[k].r==lo)
q[k].w--;
else
q[k].w++;
if(q[k].w==0 ||q[k].w==l)
nAnt--;
}
}
for(int k=0;k<n;k++)
{
for(int t=k+1;t<n;t++)
{
if(q[k].w==q[t].w)
{
q[k].r = q[k].r==lo?ro:lo;
q[t].r = q[t].r==lo?ro:lo;
}
}
}
nCnt++;
}
if(nCnt<min) min = nCnt;
if(nCnt>max) max = nCnt;
}
delete []q;
}
int _tmain(int argc, _TCHAR* argv[])
{
int min, max;
int p[5] = {3,7,11,17,23};
findmaxmin(27, p, 5, min, max);
return 0;
}
相关文章推荐
- 做了一个噩梦,梦见你离开,我从哭泣中醒来
- 统计一个整数的二进制中1的个数的三种解法
- 木杆上的蚂蚁问题(java版)
- 判断一个字符串是不是回文(C#解法)
- 老司机带你顺手撸一个支付宝蚂蚁森林效果
- 一个简洁的 search in rotated sorted array 的解法
- 蚂蚁爬木杆问题的算法思路
- 离开工具自己手写一个servlet
- 一个离开某门户网站人员自爆黑幕
- 将字符串中的字符'*'移到串的前部分 的一个解法
- 起底百度内部架构调整,吴恩达和王劲的离开只是一个剪影
- 马云说:管理不要怕员工离开!如何才能打造一个有战斗力的团队呢!
- 只要相信就一定能,无论何时何地都要坚信心中最初的梦想,永不妥协:第二次世界大战刚刚结束的时候,德国战场一片废墟,有两个美国人去访问一家住在地下室里的德国居民。离开那里的时候,其中一个美国人已激动得不能自己。甲问:“你怎么啦?”乙说:“你信不信,他们一定能很快重建家园!”
- 一个不简洁的约瑟夫环解法
- 一个令人纠结的弹窗问题,鼠标放上去显示div,鼠标离开div消失
- 一个离开某门户网站人员自爆黑幕
- 一个有趣的问题--蚂蚁和木棍的问题 2010-10-19
- 一个真实的故事:IT人离开IT还能干什么
- 2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。
- 一个离开某门户网站人员自爆黑幕[不得不转的贴]