MS的一道面试题[ZT]

静水流深cn 2007-01-07 10:18:24
圆圈上顺时针排列着1,2,3,....2000 这2000个数. 从1开始,顺时针隔一个拿走一个(1最先被拿走,下一个是3被拿走). 问最后剩下是哪一个数字.

要求给出一个比较有效率的算法!
...全文
446 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
caotian2000 2007-01-18
  • 打赏
  • 举报
回复
期待老大来个正解
an9ryfr09 2007-01-18
  • 打赏
  • 举报
回复
哦,原来是这个意思啊.我的理解能力实在太差了.
我说M$也不会出这么没水准的题嘛...
codeworker999 2007-01-18
  • 打赏
  • 举报
回复
是我理解错了,我以为到了2000就不继续了.
从1999,那么接下来被拿走的还是1,3,5,7,9...1999吧?
================================================
第一轮已经把1,3,5....这些拿走了啊

这样轮来轮去的,什么时候是个头?
an9ryfr09 2007-01-18
  • 打赏
  • 举报
回复
是我理解错了,我以为到了2000就不继续了.
从1999,那么接下来被拿走的还是1,3,5,7,9...1999吧?

这样轮来轮去的,什么时候是个头?
codeworker999 2007-01-18
  • 打赏
  • 举报
回复
to:ShadowSniper(牛头人酋长(等级10))
人家说的是 问最后剩下是哪一个数字?
从1开始取,最后拿掉1999,接着继续啊剩下2000,2,4,6...接下来应该是拿掉2,6...

问的就是最后剩下哪一个数
codeworker999 2007-01-18
  • 打赏
  • 举报
回复
1952?
caotian2000 2007-01-18
  • 打赏
  • 举报
回复
学习...
long737 2007-01-18
  • 打赏
  • 举报
回复
绝影的答案应是标准答案。
wjxfbi 2007-01-18
  • 打赏
  • 举报
回复
这上面有大家讨论的:http://community.csdn.net/Expert/topic/5194/5194500.xml?temp=.3021356
wjxfbi 2007-01-18
  • 打赏
  • 举报
回复
正确答案是1952,可以用等差数列通项公式反复求出.
ashchen 2007-01-17
  • 打赏
  • 举报
回复
1024?
lengfeng04 2007-01-17
  • 打赏
  • 举报
回复
用c简单写了一下
void main()
{
int i=0;
bool flag=true;
int count=0;
int test[2000]={0};

for(i=0; i<2000; i++)
{
test[i]=i+1;
}

while(count!=1)
{
printf("number remain in array:%d\n", count);
i=0;
count=0;
while(i<2000)
{
if(test[i]!=0)
{
if(flag)
{
test[i]=0;
count++;
}
flag=!flag;
}
i++;
}
}

for(i=0; i<2000; i++)
{
if(test[i])
printf("the last number is: test[%d]=%d", i, test[i]);
}

return;
}

用链表效率更高
li1229363 2007-01-08
  • 打赏
  • 举报
回复
的确是奇偶校验
an9ryfr09 2007-01-08
  • 打赏
  • 举报
回复
奇偶校检法.

假如一共有x个数,取走的都为奇数,那么如果x为奇数,最后剩下的就是x-1,如果x为偶数,最后剩下的就应该是x.

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧